小编pic*_*ame的帖子

有没有办法让 clap 使用文件中的默认值?

我正在使用 clap 编写 CLI来解析我的参数。我想提供选项的默认值,但如果有配置文件,则配置文件应该胜过默认值。

将命令行参数的优先级设置为默认值很容易,但我想要的优先级顺序为:

  1. 命令行参数
  2. 配置文件
  3. 默认值

如果配置文件不是通过命令行选项设置的,设置它也很容易,只需在运行之前解析配置文件parse_args,并将解析的配置文件中的值提供到default_value. 问题是,如果您在命令行中指定配置文件,则在解析之后才能更改默认值。

我能想到的唯一方法是不设置 adefault_value然后手动""匹配value_of. 问题是在这种情况下, clap 将无法构建有用的--help.

有没有办法让 clap 读取配置文件本身?

rust clap

10
推荐指数
2
解决办法
8000
查看次数

有没有办法将两个迭代器合并到同一个Vec中?

我有两个迭代器,它们最终将合并成一个迭代器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)

iterator rust

1
推荐指数
1
解决办法
455
查看次数

标签 统计

rust ×2

clap ×1

iterator ×1