我想添加一个命令行标志。这是一个标志,所以它不需要参数,它要么存在要么不存在。我还需要知道如何读取标志,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
。
4条答案
按热度按时间mrfwxfqh1#
不知道这是否是“批准”的方法,但我使用
Args::takes_value
:然后检查标志是否通过
matches.is_present("metal")
传递s4chpxco2#
当前接受的答案有点过时,指定
takes_value(false)
时不再需要指定required(false)
。因此,您需要的是:并使用
matches.is_present("metal")
检查是否存在。7hiiyaii3#
这可以通过
action
属性来完成。如果您的字段是bool
,那么默认情况下选择的操作是ArgAction::SetTrue
。这是非常好的,因为你不需要在调用参数时设置一个值。如果在运行程序时使用了这个值,它会默认设置为true,如果没有使用,它会默认设置为false。
文件
raogr8fs4#
基于构建器的答案都已过期。
with_name()
在3.0中已替换为new()
,takes_value()
在4.0中已替换为num_args()
。此外,is_present()
在3.2中已替换为contains_id()
。新版本将为:检查标志是否通过
contains_id()
传递