我有一个像这样的基本结构
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..。
| 归档时间: |
|
| 查看次数: |
4460 次 |
| 最近记录: |