Реалізація трейтів

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.