Methods 定义元组方法

Methods 定义元组方法,methods,tuples,rust,Methods,Tuples,Rust,这里有一个用于两个元素元组的swap函数: fn swap<A, B>(obj: (A, B)) -> (B, A) { let (a, b) = obj; (b, a) } 有没有办法将swap定义为两元素元组的方法?也就是说,它可以被称为: (10i, 20i).swap() 是的,有。只需定义一个新特性并立即实施,如下所示: trait Swap<U> { fn swap(self) -> U; } impl<A,

这里有一个用于两个元素元组的
swap
函数:

fn swap<A, B>(obj: (A, B)) -> (B, A)
{
    let (a, b) = obj;

    (b, a)
}
有没有办法将
swap
定义为两元素元组的方法?也就是说,它可以被称为:

(10i, 20i).swap()

是的,有。只需定义一个新特性并立即实施,如下所示:

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());
}
trait交换{
fn交换(自)->U;
}
(A,B)的impl交换{
#[内联]
fn掉期(自)->(B、A){
设(a,b)=自;
(b,a)
}
}
fn main(){
设t=(1u,2u);
println!(“{}”,t.swap());
}
请注意,为了使用此方法,您必须将
Swap
trait导入到要调用该方法的每个模块中

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());
}