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

时间:2018-11-29 02:20:15

标签: rust parameter-passing command-line-interface 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(()),
        }
    )
)

虽然此功能适用于我想要的界面,但会创建一些令人困惑的帮助消息:

... 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>的内容。)

1 个答案:

答案 0 :(得分:3)

快速浏览文档即可了解value_names()

  

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

     

注意:如果值名称的数量大于1,则此方法隐式设置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(()),
        }
    )
)