2014-10-10 16 views
7

Ecco una funzione swap per tuple di due elementi: l'usodefinizione di metodi tuple

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

    (b, a) 
} 

Esempio:

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

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

C'è un modo per definire swap come un metodo su tuple di due elementi? Cioè in modo che possa essere chiamato come:

(10i, 20i).swap() 

risposta

7

Sì, c'è. Basta definire un nuovo tratto e attuarlo subito, qualcosa di simile:

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

Nota che per poter utilizzare questo metodo si dovrà importare Swap tratto in ogni modulo in cui si desidera chiamare il metodo.

+0

Grazie Vladimir! – dharmatech