定义元组方法

dha*_*ech 7 methods tuples rust

这是swap两元素元组的函数:

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

    (b, a)
}
Run Code Online (Sandbox Code Playgroud)

使用示例:

fn main() {
    let obj = (10i, 20i);

    println!("{}", swap(obj));
}
Run Code Online (Sandbox Code Playgroud)

有没有办法swap在两元素元组上定义方法?即它可以被称为:

(10i, 20i).swap()
Run Code Online (Sandbox Code Playgroud)

Vla*_*eev 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());
}
Run Code Online (Sandbox Code Playgroud)

请注意,要使用此方法,您必须将Swaptrait 导入到要调用方法的每个模块中.