2014-10-10 5 views
7

Hier ist eine swap Funktion für zwei Elementen Tupeln:definieren Tupel Methoden

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

    (b, a) 
} 

Beispiel für die Verwendung:

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

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

Gibt es eine Möglichkeit swap als Methode auf zwei Elementen Tupeln zu definieren? I.e. so dass es so genannt werden kann:

(10i, 20i).swap() 

Antwort

7

Ja, da ist. Definieren Sie einfach einen neuen Zug und setzen es sofort, so etwas wie dieses:

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

Beachten Sie, dass Sie, um diese Methode zu verwenden Swap Merkmal in jedem Modul importieren, wo Sie die Methode aufrufen möchten.

+0

Danke Vladimir! – dharmatech

Verwandte Themen