Ö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(); }
-
Type
iç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 birCat
türü, birimpl Pet
bloğ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,
greet
sağlanır vetalk
’a dayanır. -
Belirli bir tür için birden fazla
impl
bloğuna izin verilir. Bu hem doğalimpl
bloklarını hem de özellik (trait)impl
blokları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!).impl
blokları birden fazla modüle/dosyaya bile yayılabilir.