Generic struct
- Rust kursu
- Orta seviye
- Ders 8/115
- 4 dk
Generic struct tanımlamayı ve kullanmayı öğrenirsin.
Generic struct
Struct alanları da generic olabilir. Tek tür parametresi tüm alanların aynı türde olmasını, iki parametre farklı olabilmesini sağlar:
struct Cift<T> {
a: T,
b: T,
}
struct Nokta<T, U> {
x: T,
y: U,
}
let p = Cift { a: 3, b: 7 }; // Cift<i32>
let q = Nokta { x: 5, y: 2.5 }; // Nokta<i32, f64>Vec<T>, Option<T> ve HashMap<K, V> standart kütüphanedeki generic türlerdir.
Ne zaman generic?
Bir struct'ı generic yapmak, aynı mantığın farklı içeriklerle tekrar kullanılacağı durumlar içindir: kap türleri (yığın, kuyruk, önbellek), çiftler, sarmalayıcılar. Yalnızca tek bir türle kullanılacaksa somut tür yazmak daha okunaklıdır.
struct Kutu<T> {
icerik: T,
}
let sayi = Kutu { icerik: 42 };
let metin = Kutu { icerik: "rust" };
println!("{} {}", sayi.icerik, metin.icerik); // 42 rustUygulama Çiftler
struct Cift<T> { a: T, b: T } tanımla. p = Cift { a: 3, b: 7 } ve q = Cift { a: "x", b: "y" } oluştur; p.a + p.b ve q.b değerlerini boşlukla yazdır.
Başlangıç kodu
fn main() {
// buraya yaz
}Örnek çözüm
struct Cift<T> {
a: T,
b: T,
}
fn main() {
let p = Cift { a: 3, b: 7 };
let q = Cift { a: "x", b: "y" };
println!("{} {}", p.a + p.b, q.b);
}Beklenen çıktı
10 y
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>Cift { a: 3, b: 2.5 }</code> neden derlenmez?
- a ve b aynı T türünde olmalı; i32 ile f64 farklı Doğru cevap
- Cift generic değil
- Ondalıklı sayı kullanılamaz
- Derlenir
Açıklama: Farklı türler için Nokta<T, U> gibi iki tür parametresi gerekir.
2 İki tür
struct Nokta____ {
x: T,
y: U,
}
struct Nokta<T, U> {
x: T,
y: U,
}
Açıklama: Farklı türdeki alanlar için iki tür parametresi tanımlanır.
3 İfade ve türü
| Kavram | Anlamı |
|---|---|
Cift { a: 3, b: 7 } |
Cift<i32> |
Cift { a: "x", b: "y" } |
Cift<&str> |
Nokta { x: 5, y: 2.5 } |
Nokta<i32, f64> |
Kutu { icerik: true } |
Kutu<bool> |