2014-10-10 14 views
7

iki eleman dizilerini için swap fonksiyonu verilmiştir:tanımlama demet yöntemleri burada

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

    (b, a) 
} 

örnek kullanım:

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

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

iki eleman dizilerini ilgili bir yöntem olarak swap tanımlamak için bir yol var mı? Yani Böylece, şu şekilde çağrılabilir:

(10i, 20i).swap() 

cevap

7

Evet, var. Sadece yeni bir özellik tanımlamak ve derhal böyle bir şey uygulamak: Eğer yöntemi çağırmak istediğiniz bu yöntemi kullanmak için her modüle Swap özelliği ithal etmek zorunda olacağı

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

Not.

+0

Teşekkürler Vladimir! – dharmatech