Rust
Derive makrosu
#[derive(Parser)] ile argüman yapısı tanımlarsın.
Derive makrosu
clap'te struct alanları argümanlara dönüşür; belge yorumları (///) yardım metni olur, öznitelikler davranışı belirler:
/// Kullanıcıyı selamlar
#[derive(Parser)]
#[command(version, about)]
struct Args {
/// Selamlanacak kişi
#[arg(short, long)]
ad: String,
/// Kaç kez selamlanacak
#[arg(short, long, default_value_t = 1)]
tekrar: u32,
}
short → -a, long → --ad. Alan türü dönüşümü belirler: u32 verilmişse "abc" girdisi otomatik hata verir.
Elle varsayılan ve dönüşüm
Aynı davranışı elle kurmak için her bayrak için bir yardımcı yazılabilir:
fn deger<'a>(args: &[&'a str], ad: &str) -> Option<&'a str> {
let i = args.iter().position(|a| *a == ad)?;
args.get(i + 1).copied()
}
let tekrar: u32 = match deger(args, "--tekrar") {
Some(s) => s.parse().map_err(|_| format!("--tekrar sayı olmalı: {s}"))?,
None => 1,
};
Uygulama Tekrarlı selam
Yukarıdaki deger yardımcısıyla Args { ad: String, tekrar: u32 } ayrıştır; --tekrar yoksa 1 olsun. ["--ad", "Ece", "--tekrar", "3"] için Merhaba Ece satırını tekrar kez yazdır.
Örnek çözümü göster
struct Args {
ad: String,
tekrar: u32,
}
fn deger<'a>(args: &[&'a str], ad: &str) -> Option<&'a str> {
let i = args.iter().position(|a| *a == ad)?;
args.get(i + 1).copied()
}
fn ayristir(args: &[&str]) -> Result<Args, String> {
let ad = deger(args, "--ad").ok_or("--ad gerekli")?.to_string();
let tekrar: u32 = match deger(args, "--tekrar") {
Some(s) => s.parse().map_err(|_| format!("--tekrar sayı olmalı: {s}"))?,
None => 1,
};
Ok(Args { ad, tekrar })
}
fn main() {
let a = ayristir(&["--ad", "Ece", "--tekrar", "3"]).unwrap();
for _ in 0..a.tekrar {
println!("Merhaba {}", a.ad);
}
}
Kendini test et
-
<code>#[arg(default_value_t = 1)]</code> ne sağlar?
- Bayrak verilmezse alan 1 olur ve argüman isteğe bağlı hale gelir
- Değer her zaman 1 olur
- En az 1 olmalıdır
- Yardım metnine 1 yazar
Cevabı göster
Bayrak verilmezse alan 1 olur ve argüman isteğe bağlı hale gelir — Varsayılan değer yardım çıktısında da gösterilir: [default: 1].
-
Uzun ve kısa ad
#[arg(short, ____)]
ad: String,
Cevabı göster
#[arg(short, long)]
ad: String,
-
Öznitelik ve etkisi
- #[arg(short)]
- -a
- #[arg(long)]
- --ad
- default_value_t = 1
- Varsayılan 1
- /// açıklama
- Yardım metni
Sıradaki ders: Pozisyonel argüman