Özelliklerin (Traits) Gerçekleştirimi
trait Pet { fn talk(&self) -> String; fn greet(&self) { println!("Ah sen ne şirinsin! Adın ne? {}", self.talk()); } } struct Dog { name: String, age: i8, } impl Pet for Dog { fn talk(&self) -> String { format!("Hav, benim adım {}!", self.name) } } fn main() { let fido = Dog { name: String::from("Fido"), age: 5 }; dbg!(fido.talk()); fido.greet(); }
-
TypeiçinTrait’i gerçekleştirmek (implement) üzere birimpl Trait for Type { .. }bloğu kullanırsınız. -
Go arayüzlerinin (interfaces) aksine, sadece eşleşen metotlara sahip olmak yeterli değildir:
talk()metoduna sahip birCattürü, birimpl Petbloğunda olmadığı sürecePet’i otomatik olarak karşılamaz. -
Özellikler (traits), bazı metotların varsayılan gerçekleştirmelerini (implementations) sağlayabilir. Varsayılan gerçekleştirmeler, özelliğin tüm metotlarına dayanabilir. Bu durumda,
greetsağlanır vetalk’a dayanır. -
Belirli bir tür için birden fazla
implbloğuna izin verilir. Bu hem doğalimplbloklarını hem de özellik (trait)implbloklarını içerir. Aynı şekilde belirli bir tür için birden fazla özellik gerçekleştirilebilir (ve genellikle türler birçok özelliği gerçekleştirir!).implblokları birden fazla modüle/dosyaya bile yayılabilir.