پیاده سازی Traits

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!("  Woof، نام من {} است!", self.name)
    }
}

fn main() {
    let fido = Dog { name: String::from("Fido"), age: 5 };
    fido.greet();
}
  • برای پیاده‌سازی Trait برای Type، از بلوک { .. } impl Trait for Type استفاده می‌کنید.

  • برخلاف رابط‌های Go، داشتن فقط متدهای مطابقت‌دهنده کافی نیست: نوع Cat با متد ()talk به‌طور خودکار Pet را برآورده نمی‌کند، مگر اینکه در یک بلوک impl Pet قرار داشته باشد.

  • Traits ممکن است پیاده‌سازی‌های پیش‌فرض برای برخی از متدها ارائه دهند. پیاده‌سازی‌های پیش‌فرض می‌توانند به تمامی متدهای trait وابسته باشند. در این مورد، greet ارائه شده است و به talk وابسته است.