Pozisyonel argüman
- Rust kursu
- Orta seviye
- Ders 97/115
- 4 dk
Pozisyonel argüman tanımlamayı öğrenirsin.
Pozisyonel argüman
Önünde bayrak olmayan argümanlar pozisyoneldir; sıralarına göre alanlara atanır. Vec türlü pozisyonel alan, kalan tüm değerleri toplar:
#[derive(Parser)]
struct Args {
/// İşlenecek dosyalar
dosyalar: Vec<String>,
/// Ayrıntılı çıktı
#[arg(short, long)]
ayrintili: bool,
}
// $ say a.txt --ayrintili b.txt
// dosyalar = ["a.txt", "b.txt"], ayrintili = truebool alanlar değer almayan bayraklardır: varsa true, yoksa false.
Elle ayırma
Bayrakları ve pozisyonel değerleri ayırmak için partition kullanılabilir:
let (bayraklar, dosyalar): (Vec<&str>, Vec<&str>) =
args.iter().partition(|a| a.starts_with("--"));
let ayrintili = bayraklar.contains(&"--ayrintili");partition, bir koşula göre yineleyiciyi iki koleksiyona böler; tek geçişte çalışır.
Uygulama Dosyalar ve bayrak
["a.txt", "--ayrintili", "b.txt"] argümanlarını partition ile bayraklar ve dosyalar olarak ayır. Dosya listesini {:?} ile ve --ayrintili bayrağının olup olmadığını boşlukla yazdır.
Başlangıç kodu
fn main() {
// buraya yaz
}Örnek çözüm
fn main() {
let args = ["a.txt", "--ayrintili", "b.txt"];
let (bayraklar, dosyalar): (Vec<&str>, Vec<&str>) = args.iter().partition(|a| a.starts_with("--"));
let ayrintili = bayraklar.contains(&"--ayrintili");
println!("{:?} {}", dosyalar, ayrintili);
}Beklenen çıktı
["a.txt", "b.txt"] true
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>--</code> argümanının anlamı nedir? (<code>say -- --garip-ad.txt</code>)
- Yorum başlatır
- Tüm bayrakları kapatır
- Hata verir
- Sonrasındaki her şey bayrak değil, pozisyonel değerdir Doğru cevap
Açıklama: Bu POSIX geleneğidir; tire ile başlayan dosya adlarını işlemek için kullanılır. cargo run -- da aynı amaçla kullanılır.
2 İkiye böl
let (bayraklar, dosyalar): (Vec<&str>, Vec<&str>) =
args.iter().____(|a| a.starts_with("--"));
let (bayraklar, dosyalar): (Vec<&str>, Vec<&str>) =
args.iter().partition(|a| a.starts_with("--"));
Açıklama: partition koşulu sağlayanları ve sağlamayanları ayrı koleksiyonlara koyar.
3 Alan türü ve davranış
| Kavram | Anlamı |
|---|---|
dosya: String |
Zorunlu tek değer |
dosyalar: Vec<String> |
Sıfır ya da çok değer |
ayrintili: bool |
Değersiz bayrak |
-- |
Bayrak ayrıştırmayı bitirir |