问题描述
我试图弄清楚如何使用Clap从输入参数中动态生成参数。
我要用Clap模仿的是以下python代码:
parser = argparse.ArgumentParser()
parser.add_argument("-i",type=str,nargs="*")
(input_args,additional_args) = parser.parse_known_args()
for arg in input_args:
parser.add_argument(f'--{arg}-bar',required=true,type=str)
additional_config = parser.parse_args(additional_args)
这样您就可以在命令中执行以下操作:
./foo.py -i foo bar baz --foo-bar foo --bar-bar bar --baz-bar bar
,并从第一个参数动态生成其他参数。不确定是否可以在Clap中进行操作,但我认为这是有可能的,这是由于 Readme 指出您可以使用构建器模式来动态生成参数[1]。
这是我尝试这样做的天真尝试。
use clap::{Arg,App};
fn main() {
let mut app = App::new("foo")
.arg(Arg::new("input")
.short('i')
.value_name("INPUT")
.multiple(true)
.required(true));
let matches = app.get_matches_mut();
let input: Vec<_> = matches.values_of("input").unwrap().collect()
for i in input {
app.arg(Arg::new(&*format!("{}-bar",i)).required(true))
}
}
在!format
的生命周期和app.arg
期间,编译器显然都不会对您大喊大叫,我最感兴趣的是解决如何生成app
的新参数,然后被再次匹配。我刚接触过锈,所以很有可能用Clap无法做到。
[1] https://github.com/clap-rs/clap
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)