代码之家  ›  专栏  ›  技术社区  ›  Arnav Borborah

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

  •  3
  • Arnav Borborah  · 技术社区  · 6 年前

    作为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 回复  |  直到 6 年前
        1
  •  3
  •   E_net4 Tunn    6 年前

    我们可以快速查看文档 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(()),
            }
        )
    )
    
    推荐文章