mirror of
https://github.com/google/comprehensive-rust.git
synced 2025-06-05 00:57:29 +02:00
629 B
629 B
Traits
Rust lets you abstract over types with traits. They're similar to interfaces:
trait Greet {
fn say_hello(&self);
}
struct Dog {
name: String,
}
struct Cat; // No name, cats won't respond to it anyway.
impl Greet for Dog {
fn say_hello(&self) {
println!("Wuf, my name is {}!", self.name);
}
}
impl Greet for Cat {
fn say_hello(&self) {
println!("Miau!");
}
}
fn main() {
let pets: Vec<Box<dyn Greet>> = vec![
Box::new(Dog { name: String::from("Fido") }),
Box::new(Cat),
];
for pet in pets {
pet.say_hello();
}
}