Özet - İleri kalıp eşleştirme
- Rust kursu
- İleri seviye
- Ders 77/81
- 5 dk
Struct, @ ve guard'ı birleştirerek bir renk sınıflandırıcı yazarsın.
İleri kalıp eşleştirme özeti
Kalıplar struct alanlarını sabitlerle süzer ve bağlar, iç içe yapıları tek seferde açar. ad @ kalıp denetler ve bağlar; guard'lar (if) kalıbın ifade edemediği ilişkileri denetler ama kapsayıcılığa sayılmaz. Bağlama modları: taşıma, ref, ref mut; referans üzerinde eşleştirince otomatik seçilir. Dilim kalıpları ([ilk, .., son], [x, kalan @ ..]) dizileri ve vektörleri uzunluğa göre ayırır.
Dilim kalıpları
Dilim kalıpları uzunluğa göre dallanmayı ve uçlara erişmeyi tek yapıda toplar:
fn tanimla(v: &[i32]) -> String {
match v {
[] => String::from("boş"),
[x] => format!("tek: {x}"),
[ilk, .., son] if ilk == son => format!("uçlar eşit: {ilk}"),
[ilk, orta @ .., son] => format!("{ilk}..{son} ({} ara)", orta.len()),
}
}Kalıp kümesi kapsayıcıdır: boş, tek ve iki-ya-da-daha-fazla durumları her uzunluğu karşılar (guard'lı kol sayılmasa bile son kol kalanları alır).
Uygulama Dilim tanımla
Yukarıdaki tanimla fonksiyonunu yaz. [], [7], [1, 2, 1] ve [1, 2, 3, 4] için sonuçları ayrı satırlara yazdır.
Başlangıç kodu
fn main() {
// buraya yaz
}Örnek çözüm
fn tanimla(v: &[i32]) -> String {
match v {
[] => String::from("boş"),
[x] => format!("tek: {x}"),
[ilk, .., son] if ilk == son => format!("uçlar eşit: {ilk}"),
[ilk, orta @ .., son] => format!("{ilk}..{son} ({} ara)", orta.len()),
}
}
fn main() {
let girdiler: [&[i32]; 4] = [&[], &[7], &[1, 2, 1], &[1, 2, 3, 4]];
for v in girdiler {
println!("{}", tanimla(v));
}
}Beklenen çıktı
boş tek: 7 uçlar eşit: 1 1..4 (2 ara)
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>[ilk, .., son]</code> kalıbı tek elemanlı bir dilimle eşleşir mi?
- Panic
- Derlenmez
- Hayır; en az iki eleman gerekir Doğru cevap
- Evet, ilk ve son aynı olur
Açıklama: Adlandırılmış iki konum iki ayrı eleman ister; tek eleman için [x] kolu gerekir.
2 Ortayı bağla
[ilk, orta ____ .., son] => format!("{} ara", orta.len()),
[ilk, orta @ .., son] => format!("{} ara", orta.len()),
Açıklama: orta @ .. ortadaki elemanları bir dilim olarak bağlar.
3 Dilim ve sonuç
| Kavram | Anlamı |
|---|---|
[] |
boş |
[7] |
tek: 7 |
[1, 2, 1] |
uçlar eşit: 1 |
[1, 2, 3, 4] |
1..4 (2 ara) |