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.