![](/img/trans.png)
[英]How do I use the functionality of a Rust crate that has CLAP without using the command line?
[英]How do I specify a boolean command line flag using Clap?
我想添加一個命令行標志。 它是一個標志,所以它不需要參數,它存在或不存在。 我還需要知道如何讀取標志,無論是 TRUE 還是 FALSE。
這是定義標志的代碼:
.arg(
Arg::with_name("metal")
.long("metal-micky")
.required(false)
.help("I want metal micky"),
)
我正在嘗試讀取這樣的值:
let z = matches.value_of("metal");
但是,當我打印它時,結果為None
:
println!("FLAG: {:?}", z);
即使我在命令行上指定標志,它也是None
。
不知道這是否是“批准”的方法,但我使用Args::takes_value
:
.arg(
Arg::with_name("metal")
.long("metal-micky")
.required(false)
.takes_value(false)
.help("I want metal micky"),
)
然后檢查標志是否通過matches.is_present("metal")
這個答案已經過時了。 你想要的是:
.arg(
Arg::with_name("metal")
.long("metal-micky")
.takes_value(false)
.help("I want metal mickey")
然后你檢查: matches.is_present("metal")
基於構建器的答案都已過時。 with_name()
new()
並且takes_value()
num_args()
。 is_present()
也已在 3.2 中替換為contains_id()
。 新版本將是:
.arg(
Arg::new("metal")
.long("metal-micky")
.required(false)
.num_args(0)
.help("I want metal micky"),
)
檢查標志是否通過contains_id()
這可以通過action
屬性來完成。 如果您的字段是bool
,那么默認情況下,選擇的操作是ArgAction::SetTrue
。
這非常好,因為您在調用參數時不需要設置值。 它在運行程序時將值默認設置為如果使用則為 true,如果不使用則為 false。
use clap::Parser;
/// This is a simple program
#[derive(Parser, Debug)]
#[clap(author, version, about, long_about = None)]
struct Args {
/// It just works!
#[clap(long, short, action)]
it_just_works: bool,
}
fn main() {
let args = Args::parse();
println!("It just works {}!", args.it_just_works)
}
文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.