2014-10-10 16 views
7

यहाँ दो-तत्व tuples के लिए एक 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)); 
} 

वहाँ दो तत्व tuples पर एक विधि के रूप 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

संबंधित मुद्दे