@ bağlama
- Rust kursu
- İleri seviye
- Ders 74/81
- 4 dk
@ operatörü ile değer aralığı bağlamayı öğrenirsin.
@ bağlama
ad @ kalıp, bir değeri kalıba göre denetlerken aynı anda bir değişkene bağlar. Aralıklar ve iç içe kalıplarla birlikte kullanışlıdır:
fn basamak(n: u32) -> String {
match n {
k @ 0..=9 => format!("tek basamak {k}"),
k @ 10..=99 => format!("iki basamak {k}"),
k => format!("büyük {k}"),
}
}
match opt {
Some(x @ 1..=5) => println!("küçük: {x}"),
Some(x) => println!("diğer: {x}"),
None => {}
}@ olmasaydı aralık kalıbı değeri bağlamazdı ve kolda n yeniden kullanılmak zorunda kalınırdı.
| ile birlikte
@ birden çok alternatifli kalıplarla da çalışır; tüm alternatifler aynı değişkeni bağlamalıdır:
match karakter {
c @ ('a' | 'e' | 'ı' | 'i' | 'o' | 'ö' | 'u' | 'ü') => println!("sesli {c}"),
c @ ('0'..='9') => println!("rakam {c}"),
c => println!("diğer {c}"),
}Uygulama Basamak sınıfı
Yukarıdaki basamak fonksiyonunu @ bağlamalarıyla yaz. 7, 42 ve 500 için sonuçları ayrı satırlara yazdır.
Başlangıç kodu
fn main() {
// buraya yaz
}Örnek çözüm
fn basamak(n: u32) -> String {
match n {
k @ 0..=9 => format!("tek basamak {k}"),
k @ 10..=99 => format!("iki basamak {k}"),
k => format!("büyük {k}"),
}
}
fn main() {
for n in [7, 42, 500] {
println!("{}", basamak(n));
}
}Beklenen çıktı
tek basamak 7 iki basamak 42 büyük 500
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>e @ Mesaj::Yaz(_)</code> kalıbı ne bağlar?
- Derlenmez
- Tüm Mesaj::Yaz değerini e'ye Doğru cevap
- Yalnızca içteki metni
- Hiçbir şey
Açıklama: @ bütün değeri bağlar; iç parçaya da ihtiyaç varsa e @ Mesaj::Yaz(ref m) gibi birlikte yazılabilir.
2 Aralıkla bağla
match n {
k ____ 0..=9 => format!("tek basamak {k}"),
k => format!("{k}"),
}
match n {
k @ 0..=9 => format!("tek basamak {k}"),
k => format!("{k}"),
}
Açıklama: @ hem aralığı denetler hem değeri k'ye bağlar.
3 Sayı ve basamak sonucu
| Kavram | Anlamı |
|---|---|
7 |
tek basamak 7 |
42 |
iki basamak 42 |
500 |
büyük 500 |
0 |
tek basamak 0 |