如何更改采用多个值的 clap 参数中的值的名称?

Arn*_*rah 4 parameter-passing command-line-interface rust clap

作为我的 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(()),
        }
    )
)
Run Code Online (Sandbox Code Playgroud)

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

... Help text ...

OPTIONS:
    ... other options ...
    -p, --position <position> <position>    The position for yada yada yada
Run Code Online (Sandbox Code Playgroud)

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

Sta*_*eur 5

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

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

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

注意:隐式设置 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(()),
        }
    )
)
Run Code Online (Sandbox Code Playgroud)