4

作为我的 CLI 工具的一部分,我有一个带有clap::Arg多个值的值,代表一个(x, y)坐标。我希望使用能够将值传递为-p/--position 1 0

.arg(
    clap::Arg::with_name("position")
        .help("The position for yada yada yada")
        .long("position")
        .short("p")
        .number_of_values(2)
        .validator(|p| match p.parse::<usize>() {
            Err(_) => Err(String::from("Error string")),
            Ok(_) => Ok(()),
        }
    )
)

虽然这适用于我想要的界面,但这会产生一些令人困惑的帮助消息:

... Help text ...

OPTIONS:
    ... other options ...
    -p, --position <position> <position>    The position for yada yada yada

这里困扰我的是-p, --position <position> <position>,这似乎表明两个位置正在传递给参数。有什么办法可以用<position> <position>我选择的字符串替换?-p, --position <x> <y>(我的目标是在帮助信息中得到类似的东西。)

4

1 回答 1

5

快速浏览一下文档给我们value_names()

为选项参数的值指定多个名称。这些名称只是装饰性的,仅用于帮助和使用字符串。这些名称不用于访问参数。参数的值按数字顺序访问(即,如果您指定两个名称,一和二,一将是第一个匹配值,二将是第二个)。

注意:这会隐式设置Arg::number_of_values值名称的数量是否大于一。即请注意,您为值设置的“名称”数量将是满足此参数所需的确切值数

注意:隐式设置Arg::takes_value(true)

.arg(
    clap::Arg::with_name("position")
        .help("The position for yada yada yada")
        .long("position")
        .short("p")
        .value_names(&["x", "y"])
        .validator(|p| match p.parse::<usize>() {
            Err(_) => Err(String::from("Error string")),
            Ok(_) => Ok(()),
        }
    )
)
于 2018-11-29T05:11:57.150 回答