使用 clap 遍历位置参数
Iterate through positional arguments with clap
假设我有以下命令行:
./app foo bar baz
我想从中取出这个数组:
["foo", "bar", "baz"]
考虑到位置参数可以任意计数,有没有办法在 clap 中做到这一点?
您要查找的函数是values_of,您可以这样使用:
let matches = App::new("My Super Program")
.arg(Arg::with_name("something")
.multiple(true))
.get_matches();
let iterator = matches.values_of("something");
for el in iterator.unwrap() {
println!("{:?}", el);
};
如果您不关心保留无效的 UTF-8,更简单的选择是使用 values_of_lossy,其中 returns 一个实际的 Vector (Option<Vec<String>>
) 而不是迭代器。
let arguments = matches.values_of_lossy("something").unwrap();
println!("{:?}", arguments);
请记住,您真的不应该在实际程序中解包这些值,因为如果未提供参数,它会在 运行 时崩溃。唯一的例外是设置了 required(true)
的参数。在调用 get_matches
.
时,它们的缺失会导致 运行 次错误(带有有用的错误消息)
假设我有以下命令行:
./app foo bar baz
我想从中取出这个数组:
["foo", "bar", "baz"]
考虑到位置参数可以任意计数,有没有办法在 clap 中做到这一点?
您要查找的函数是values_of,您可以这样使用:
let matches = App::new("My Super Program")
.arg(Arg::with_name("something")
.multiple(true))
.get_matches();
let iterator = matches.values_of("something");
for el in iterator.unwrap() {
println!("{:?}", el);
};
如果您不关心保留无效的 UTF-8,更简单的选择是使用 values_of_lossy,其中 returns 一个实际的 Vector (Option<Vec<String>>
) 而不是迭代器。
let arguments = matches.values_of_lossy("something").unwrap();
println!("{:?}", arguments);
请记住,您真的不应该在实际程序中解包这些值,因为如果未提供参数,它会在 运行 时崩溃。唯一的例外是设置了 required(true)
的参数。在调用 get_matches
.