Реалізація трейтів
trait Pet {
fn talk(&self) -> String;
fn greet(&self) {
println!("Який же ти милий! Як тебе звати? {}", self.talk());
}
}
struct Dog {
name: String,
age: i8,
}
impl Pet for Dog {
fn talk(&self) -> String {
format!("Гав, мене звуть {}!", self.name)
}
}
fn main() {
let fido = Dog { name: String::from("Фідо"), age: 5 };
fido.greet();
}
-
Щоб реалізувати
TraitдляType, ви використовуєтеimpl Trait for Type { .. }блок. -
На відміну від інтерфейсів Go, просто мати відповідні методи недостатньо: тип
Catз методомtalk()не буде автоматично задовольнятиPet, якщо він не знаходиться у блоціimpl Pet. -
Трейти можуть надавати реалізації за замовчуванням для деяких методів. Реалізації за замовчуванням можуть покладатися на всі методи трейту. У цьому випадку надається
greet, який покладається наtalk.