Generic enum
- Rust kursu
- Orta seviye
- Ders 10/115
- 4 dk
Option<T> gibi generic enum tanımlarsın.
Generic enum
En çok kullandığın iki enum generic'tir:
enum Option<T> {
Some(T),
None,
}
enum Result<T, E> {
Ok(T),
Err(E),
}Kendi generic enum'ını da yazabilirsin. Örneğin bir aramanın sonucunu, aranan değerin türünden bağımsız ifade etmek için:
enum Sonuc<T> {
Bulundu(T),
Yok,
}Generic enum'a metot
Generic enum'a da impl<T> ile metot yazılır; trait sınırı içerikle ne yapılabileceğini belirler:
use std::fmt::Display;
impl<T: Display> Sonuc<T> {
fn goster(&self) -> String {
match self {
Sonuc::Bulundu(v) => format!("bulundu: {v}"),
Sonuc::Yok => String::from("yok"),
}
}
}Uygulama Arama sonucu
Yukarıdaki Sonuc<T> enum'ını ve goster metodunu yaz. Sonuc::Bulundu(42) ve Sonuc::<&str>::Yok için sonuçları | ile ayırarak yazdır.
Başlangıç kodu
use std::fmt::Display;
fn main() {
// buraya yaz
}Örnek çözüm
use std::fmt::Display;
enum Sonuc<T> {
Bulundu(T),
Yok,
}
impl<T: Display> Sonuc<T> {
fn goster(&self) -> String {
match self {
Sonuc::Bulundu(v) => format!("bulundu: {v}"),
Sonuc::Yok => String::from("yok"),
}
}
}
fn main() {
let a = Sonuc::Bulundu(42);
let b = Sonuc::<&str>::Yok;
println!("{} | {}", a.goster(), b.goster());
}Beklenen çıktı
bulundu: 42 | yok
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>let s = Sonuc::Yok;</code> neden tek başına derlenmez?
- Enum'lar generic olamaz
- Derlenir
- T çıkarılamıyor; Sonuc::<i32>::Yok gibi belirtilmeli Doğru cevap
- Yok geçersiz variant
Açıklama: Yok variant'ı T hakkında bilgi taşımaz; tür ya açıkça yazılır ya da sonraki kullanımdan çıkarılır.
2 Türü belirt
let s = Sonuc::____::Yok;
let s = Sonuc::<i32>::Yok;
Açıklama: Turbofish sözdizimi ::<T> ile tür açıkça verilir.
3 Değer ve türü
| Kavram | Anlamı |
|---|---|
Some(5) |
Option<i32> |
Ok::<u8, String>(1) |
Result<u8, String> |
Sonuc::Bulundu("a") |
Sonuc<&str> |
Sonuc::<f64>::Yok |
Sonuc<f64> |