Birden fazla bound
- Rust kursu
- Orta seviye
- Ders 20/115
- 4 dk
+ ile birden fazla trait sınırını birleştirirsin.
Birden fazla bound
Bir tür parametresi birkaç davranışa ihtiyaç duyuyorsa sınırlar + ile birleştirilir:
use std::fmt::Display;
fn buyuk_olan<T: PartialOrd + Display>(a: T, b: T) -> String {
if a > b {
format!("{a}")
} else {
format!("{b}")
}
}PartialOrd karşılaştırma için, Display biçimlendirme için gerekir. Sırası önemli değildir.
PartialOrd ve Ord farkı
PartialOrd bazı değerlerin karşılaştırılamayabileceğine izin verir: f64::NAN < 1.0 ve f64::NAN > 1.0 ikisi de false'tur. Ord ise tam sıralama ister; tamsayılar ve metinler Ord'dur, ondalıklılar değildir.
let mut v = vec![3, 1, 2];
v.sort(); // Ord gerekir: i32 tamam
let mut f = vec![2.5, 1.0];
// f.sort(); // hata: f64 Ord değil
f.sort_by(|a, b| a.total_cmp(b));Uygulama Büyük olanı yaz
Yukarıdaki buyuk_olan fonksiyonunu yaz. (3, 8) ve ("elma", "armut") için sonuçları boşlukla yazdır.
Başlangıç kodu
use std::fmt::Display;
fn main() {
// buraya yaz
}Örnek çözüm
use std::fmt::Display;
fn buyuk_olan<T: PartialOrd + Display>(a: T, b: T) -> String {
if a > b {
format!("{a}")
} else {
format!("{b}")
}
}
fn main() {
println!("{} {}", buyuk_olan(3, 8), buyuk_olan("elma", "armut"));
}Beklenen çıktı
8 elma
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>buyuk_olan("elma", "armut")</code> ne döndürür?
- "elma" Doğru cevap
- "armut"
- Derleme hatası
- "elmaarmut"
Açıklama: Metinler sözlük sırasıyla karşılaştırılır; "e" > "a" olduğu için elma büyüktür.
2 Sınırları birleştir
fn buyuk_olan<T: PartialOrd ____ Display>(a: T, b: T) -> String
fn buyuk_olan<T: PartialOrd + Display>(a: T, b: T) -> String
Açıklama: Birden çok trait sınırı + ile birleştirilir.
3 Tür ve uyguladığı
| Kavram | Anlamı |
|---|---|
i32 |
Ord + Copy |
f64 |
PartialOrd (Ord değil) |
&str |
Ord + Display |
Vec<i32> |
Ord, Display değil |