trait Greeter {
fn name(&self) -> &str;
// Default — only `name` must be implemented.
fn greet(&self) -> String {
format!("Hello, {}!", self.name())
}
fn shout(&self) -> String {
self.greet().to_uppercase()
}
}
struct Person { name: String }
impl Greeter for Person {
fn name(&self) -> &str { &self.name }
// Override only if you want different behavior
fn greet(&self) -> String { format!("Howdy, {}!", self.name) }
}
fn main() {
let p = Person { name: "Alice".into() };
println!("{}", p.greet()); // Howdy, Alice! (overridden)
println!("{}", p.shout()); // HOWDY, ALICE! (uses default)
}
Create a free account and build your private vault. Share publicly whenever you want.