实现 Unsafe Trait

1. trait Pet {
2. fn talk(&self) -> String;

4. fn greet(&self) {
5. println!("Oh you're a cutie! What's your name? {}", self.talk());
6. }
7. }

9. struct Dog {
10. name: String,
11. age: i8,
12. }

14. impl Pet for Dog {
15. fn talk(&self) -> String {
16. format!("Woof, my name is {}!", self.name)
17. }
18. }

20. fn main() {
21. let fido = Dog { name: String::from("Fido"), age: 5 };
22. fido.greet();
23. }
  • To implement Trait for Type, you use an impl Trait for Type { .. } block.
  • Unlike Go interfaces, just having matching methods is not enough: a Cat type with a talk() method would not automatically satisfy Pet unless it is in an impl Pet block.
  • Traits may provide default implementations of some methods. Default implementations can rely on all the methods of the trait. In this case, greet is provided, and relies on talk.