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