2014-10-10 16 views
7

Dưới đây là một chức năng swap cho tuples hai yếu tố:Xác định phương pháp tuple

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

    (b, a) 
} 

Ví dụ sử dụng:

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

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

Có cách nào để xác định swap như một phương pháp trên tuples hai yếu tố? I E. để có thể gọi là:

(10i, 20i).swap() 

Trả lời

7

Có, có. Chỉ cần xác định một đặc điểm mới và thực hiện nó ngay lập tức, một cái gì đó như thế này:

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

Lưu ý rằng để sử dụng phương pháp này, bạn sẽ phải nhập khẩu Swap đặc điểm vào mỗi mô-đun mà bạn muốn gọi phương thức.

+0

Cảm ơn Vladimir! – dharmatech

Các vấn đề liên quan