我想有一个命令行在Rust使用clap 4允许这一点:
app --wait
如果--wait
存在,则启动函数。如果不存在,则不执行任何操作。
我正在尝试下面的代码,但没有成功:if command.contains_id("wait")
始终为真!使用或不使用--wait
作为参数,为什么?
let command = Command::new("")
.arg(
Arg::new("wait")
.long("wait")
.required(false)
.num_args(0)
.help("Wait..."),
)
.get_matches();
if command.contains_id("wait") {
do_wait().await;
}
1条答案
按热度按时间b1zrtrql1#
来自
default_value
的clap4文档:参数不存在时的值。
注:如果用户在运行时不使用此参数,ArgMatches::contains_id仍将返回true。如果要确定在运行时是否使用了此参数,请考虑ArgMatches::value_source。
所以看起来
default_value
起作用了。为什么?我不是很确定,但是看起来Arg::new
使用了Arg::default
的默认值。这默认default_vals
为一个空vec,这在num_args(0)
之外的任何东西上都不起作用,但是在你没有参数的情况下确实起作用。因此,您的解决方案似乎是使用
value_source
而不是contains_id
,但是您不应该像这样使用num_args。改为使用
.action(ArgAction::SetTrue)
,如下所示:请参阅此处的标志部分了解更多详细信息。