2014-10-10 39 views
7

这里有一个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() 

回答

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特质到每一个模块要调用的方法。

+0

谢谢弗拉基米尔! – dharmatech 2014-10-10 19:44:15