这里有一个用于双元素元组的swap
函数:
fn swap<A, B>(obj: (A, B)) -> (B, A)
{
let (a, b) = obj;
(b, a)
}
使用示例:
fn main() {
let obj = (10i, 20i);
println!("{}", swap(obj));
}
有没有办法将swap
定义为双元素元组的方法?即所以它可以被称为:
(10i, 20i).swap()
答案 0 :(得分:7)
是的,有。只需定义一个新特征并立即实现它,如下所示:
trait Swap<U> {
fn swap(self) -> U;
}
impl<A, B> Swap<(B, A)> for (A, B) {
#[inline]
fn swap(self) -> (B, A) {
let (a, b) = self;
(b, a)
}
}
fn main() {
let t = (1u, 2u);
println!("{}", t.swap());
}
请注意,要使用此方法,您必须将Swap
特征导入到要调用方法的每个模块中。