Rust traits: Difference between revisions
From wikinotes
(→Basics) |
No edit summary |
||
Line 7: | Line 7: | ||
struct Dog { name: String, breed: String } | struct Dog { name: String, breed: String } | ||
// all implementors of 'Pet' must have method 'play' with this method signature | |||
trait Pet { | trait Pet { | ||
fn play(&self); | fn play(&self); | ||
Line 18: | Line 19: | ||
} | } | ||
// use trait as param type | |||
fn play_with_pet(pet: &impl Pet) { | fn play_with_pet(pet: &impl Pet) { | ||
pet.play(); | pet.play(); |
Revision as of 19:51, 8 February 2023
Traits are similar to interfaces except they can have a default implementation.
Basics
struct Cat { name: String } struct Dog { name: String, breed: String } // all implementors of 'Pet' must have method 'play' with this method signature trait Pet { fn play(&self); } impl Pet for Cat { fn play(&self) { println!("you give a ball of yarn to {}", self.name) } } // use trait as param type fn play_with_pet(pet: &impl Pet) { pet.play(); } fn main(){ let cat = Cat{name: "maize".to_string()}; let dog = Dog{name: "midnight".to_string(), breed: "?".to_string()}; play_with_pet(&cat); play_with_pet(&dog); }