使用Rust clap 4时,为何`contains_id("wait")`判断始终为true?
问题原因与解决方案
问题原因
你使用的contains_id("wait")是用来检查该参数是否在命令定义中存在,而非判断用户是否实际传入了这个参数。只要你在Command里定义了这个arg,不管用户有没有传--wait,这个判断都会返回true,这就是不符合预期的根本原因。
正确写法
对于这种无参数值的开关型参数,clap 4提供了get_flag方法来专门判断用户是否传入了该参数。修改后的代码如下:
let command = Command::new("") .arg( Arg::new("wait") .long("wait") .required(false) .num_args(0) .help("Wait..."), ) .get_matches(); if command.get_flag("wait") { do_wait().await; }
这样就能实现预期逻辑:只有当用户传入--wait参数时,才执行do_wait()函数,否则不执行任何操作。
内容的提问来源于stack exchange,提问作者Fred Hors
相关产品推荐
相关产品推荐

