Реалізація трейтів
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
.