2014-10-10 42 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