Generic metod
- Rust kursu
- Orta seviye
- Ders 9/115
- 4 dk
Generic struct için impl bloğu ve metot yazarsın.
Generic metod
Generic bir türe metot yazarken impl'den sonra da tür parametresi bildirilir. Bu metotlar her T için geçerlidir:
impl<T> Cift<T> {
fn ilk(&self) -> &T {
&self.a
}
}Yalnızca belirli bir somut tür için metot da yazılabilir; o zaman impl'de parametre yoktur:
impl Cift<f64> {
fn ortalama(&self) -> f64 {
(self.a + self.b) / 2.0
}
}Koşullu metotlar
Üçüncü bir seçenek, metodu trait sınırına bağlamaktır: yalnızca T belirli bir davranışa sahipse metot vardır:
use std::fmt::Display;
impl<T: Display + PartialOrd> Cift<T> {
fn buyugu_yaz(&self) {
if self.a >= self.b {
println!("büyük: {}", self.a);
} else {
println!("büyük: {}", self.b);
}
}
}Metot düzeyinde ayrı generic parametre de tanımlanabilir: fn karistir<U>(self, o: Cift<U>) -> Nokta<T, U>.
Uygulama Çift metotları
Cift<T> için her T'de çalışan fn ilk(&self) -> &T, yalnızca Cift<f64> için fn ortalama(&self) -> f64 yaz. Cift { a: 2.0, b: 5.0 } için iki sonucu boşlukla yazdır.
Başlangıç kodu
struct Cift<T> {
a: T,
b: T,
}
fn main() {
// buraya yaz
}Örnek çözüm
struct Cift<T> {
a: T,
b: T,
}
impl<T> Cift<T> {
fn ilk(&self) -> &T {
&self.a
}
}
impl Cift<f64> {
fn ortalama(&self) -> f64 {
(self.a + self.b) / 2.0
}
}
fn main() {
let c = Cift { a: 2.0, b: 5.0 };
println!("{} {}", c.ilk(), c.ortalama());
}Beklenen çıktı
2 3.5
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>Cift { a: 1, b: 2 }.ortalama()</code> derlenir mi? (<code>ortalama</code> yalnızca <code>Cift<f64></code> için)
- Evet, 1.5 döner
- Evet, 1 döner
- Çalışma anında hata
- Hayır; Cift<i32> için ortalama tanımlı değil Doğru cevap
Açıklama: Somut türe yazılan impl yalnızca o türde görünür. Cift { a: 1.0, b: 2.0 } yazılırsa çalışır.
2 impl parametresi
impl____ Cift<T> {
fn ilk(&self) -> &T {
&self.a
}
}
impl<T> Cift<T> {
fn ilk(&self) -> &T {
&self.a
}
}
Açıklama: Her T için geçerli metotlarda impl<T> yazılır.
3 impl biçimi ve kapsamı
| Kavram | Anlamı |
|---|---|
impl<T> Cift<T> |
Her T |
impl Cift<f64> |
Yalnızca f64 |
impl<T: Display> Cift<T> |
Display olan T |
fn f<U>(..) |
Metoda özel tür |