定义元组方法

时间:2014-10-10 17:27:23

标签: methods tuples rust

这里有一个用于双元素元组的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()

1 个答案:

答案 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特征导入到要调用方法的每个模块中。