پیاده سازی 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
وابسته است.