2014-10-14 16 views
6

Một số phương pháp tính năng có triển khai mặc định, có thể được ghi đè bởi người triển khai. Làm cách nào tôi có thể sử dụng triển khai mặc định cho cấu trúc ghi đè mặc định?Sử dụng phương pháp trait mặc định

dụ:

trait SomeTrait { 
    fn get_num(self) -> uint; 
    fn add_to_num(self) -> uint { 
     self.get_num() + 1 
    } 
} 

struct SomeStruct; 
impl SomeTrait for SomeStruct { 
    fn get_num(self) -> uint { 3 } 
    fn add_to_num(self) -> uint { 
     self.get_num() + 2 
    } 
} 

fn main() { 
    let the_struct = SomeStruct; 
    println!("{}", the_struct.add_to_num()): // how can I get this to print 4 instead of 5? 
} 

Trả lời

5

Có thể có một giải pháp tốt hơn, nhưng một trong tôi đã đi lên với là chỉ cần xác định một cấu trúc giả có chứa các struct Tôi muốn thay đổi, và sau đó tôi có thể cherry- chọn phương pháp nào tôi muốn ghi đè và phương pháp nào tôi muốn giữ mặc định. Để mở rộng ví dụ ban đầu:

trait SomeTrait { 
    fn get_num(self) -> uint; 
    fn add_to_num(self) -> uint { 
     self.get_num() + 1 
    } 
} 

struct SomeStruct; 

impl SomeTrait for SomeStruct { 
    fn get_num(self) -> uint { 3 } 
    fn add_to_num(self) -> uint { 
     self.get_num() + 2 
    } 
} 

fn main() { 

    struct SomeOtherStruct { 
     base: SomeStruct 
    } 

    impl SomeTrait for SomeOtherStruct { 
     fn get_num(self) -> uint { 
      self.base.get_num() 
     } 
     //This dummy struct keeps the default behavior of add_to_num() 
    } 

    let the_struct = SomeStruct; 
    println!("{}", the_struct.add_to_num()); 

    //now we can call the default method using the original struct's data. 
    println!("{}", SomeOtherStruct{base:the_struct}.add_to_num()); 
} 
Các vấn đề liên quan