如何使用 clap 来创建向量

Zac*_*h W 7 rust clap

我有一个像这样的基本结构

pub struct Args {
  #[clap(short, long, value_parser)]
  pub files: Vec<String>,
}
Run Code Online (Sandbox Code Playgroud)

我试图让这个结构体采用多个这样的值

cargo run -- --files hello world
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时,它看不world正确。这是错误的:

error: Found argument 'world' which wasn't expected, or isn't valid in this context
Run Code Online (Sandbox Code Playgroud)

让 clap 填充此结构的正确方法是什么?

fra*_*pps 12

您可以用来num_args指定参数出现次数和允许的值的范围,如下所示:

use clap::Parser;

#[derive(Parser)]
pub struct Args {
    #[clap(short, long, value_parser, num_args = 1.., value_delimiter = ' ')]
    pub files: Vec<String>,
  }

fn main() {
    let args = Args::parse();

    println!("files: {:?}", args.files);
}
Run Code Online (Sandbox Code Playgroud)

这将允许双方

cargo run -- --files hello world
Run Code Online (Sandbox Code Playgroud)

cargo run -- --files hello --files world
Run Code Online (Sandbox Code Playgroud)

此处指定value_delimiter并不是严格必要的,但我只是想指出您可以使用不同的字符作为分隔符,如下所示。

如果您还想允许传递空数组,您可以num_args像这样更改属性num_args = 0..