2014-10-10 16 views
7

Oto swap funkcja krotki dwuelementowych:Definiowanie metod krotkowe

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

    (b, a) 
} 

Przykład użycia:

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

    println!("{}", swap(obj)); 
} 

Czy istnieje sposób, aby określić swap jako metoda na krotki dwuelementowych? To znaczy. aby można było go nazwać:

(10i, 20i).swap() 

Odpowiedz

7

Tak, jest. Wystarczy zdefiniować nową cechę i wdrożyć go natychmiast, coś takiego:

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

pamiętać, że w celu korzystania z tej metody trzeba będzie importować Swap cechę do każdego modułu, w którym chcesz wywołać metodę.

+0

Dzięki Vladimir! – dharmatech