CodeBlanks Logo Icon CodeBlanks

Birden fazla bound

+ 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

main.rs
use std::fmt::Display;

fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
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

Soru
fn buyuk_olan<T: PartialOrd ____ Display>(a: T, b: T) -> String
Cevap
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

Orta seviye bölümündeki tüm dersler