我正在使用 clap 编写 CLI来解析我的参数。我想提供选项的默认值,但如果有配置文件,则配置文件应该胜过默认值。
将命令行参数的优先级设置为默认值很容易,但我想要的优先级顺序为:
如果配置文件不是通过命令行选项设置的,设置它也很容易,只需在运行之前解析配置文件parse_args,并将解析的配置文件中的值提供到default_value. 问题是,如果您在命令行中指定配置文件,则在解析之后才能更改默认值。
我能想到的唯一方法是不设置 adefault_value然后手动""匹配value_of. 问题是在这种情况下, clap 将无法构建有用的--help.
有没有办法让 clap 读取配置文件本身?
我有两个迭代器,它们最终将合并成一个迭代器Vec,但是在合并之前,我需要对最终结果进行过滤。例如:
let a = vec![1, 2, 3, 4].into_iter().map(|x| x * 2);
let b = vec![0, 3, 5, 6, 7].into_iter().map(|x| x * 3);
let c = a + b;
assert_eq!(
c.filter(|&x| x > 5).collect::<Vec<u8>>(),
vec![6, 8, 9, 15, 18, 21]
);
Run Code Online (Sandbox Code Playgroud)
我可以做这样的事情:
let mut a = vec![1, 2, 3, 4]
.into_iter()
.map(|x| x * 2)
.collect::<Vec<u8>>();
let b = vec![0, 3, 5, 6, 7]
.into_iter()
.map(|x| x * 3)
.collect::<Vec<u8>>();
a.extend(b);
assert_eq!(
a.into_iter().filter(|&x| x > 5).collect::<Vec<u8>>(),
vec![6, …Run Code Online (Sandbox Code Playgroud)