簡體   English   中英

如何使用 Clap 指定 boolean 命令行標志?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM