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