繁体   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