Özellik (Trait) Sınırları
Jeneriklerle (generics) çalışırken, genellikle türlerin bazı özellikleri (trait) gerçekleştirmesini (implement) istersiniz, böylece bu özelliğin metotlarını çağırabilirsiniz.
Bunu T: Trait
ile yapabilirsiniz:
fn duplicate<T: Clone>(a: T) -> (T, T) { (a.clone(), a.clone()) } struct NotCloneable; fn main() { let foo = String::from("foo"); let pair = duplicate(foo); println!("{pair:?}"); }
This slide should take about 8 minutes.
-
Bir
NotCloneable
yapıpduplicate
’e geçirmeyi deneyin. -
Birden fazla özellik (trait) gerektiğinde, bunları birleştirmek için
+
kullanın. -
Öğrencilerin kod okurken karşılaşacakları bir
where
yan tümcesi gösterin.fn duplicate<T>(a: T) -> (T, T) where T: Clone, { (a.clone(), a.clone()) }
- Çok sayıda parametreniz varsa fonksiyon imzasını (signature) sadeleştirir.
- Daha güçlü kılan ek özelliklere sahiptir.
- Birisi sorarsa, ekstra özellik, “:” solundaki türün
Option<T>
gibi keyfi olabilmesidir.
- Birisi sorarsa, ekstra özellik, “:” solundaki türün
-
Rust’ın (şimdilik) özelleştirmeyi (specialization) desteklemediğini unutmayın. Örneğin, orijinal
duplicate
verildiğinde, özel birduplicate(a: u32)
eklemek geçersizdir.