我需要检查第二个元素以确定我对其余参数执行的操作。
这将循环遍历命令行参数并跳过第一个参数,因为它始终是程序名称。它还会跳过第二个,因为这是我在列表上执行的操作:
for arg in std::env::args().skip(2)
我正在做以下是多余的:
let check: Vec<String> = env::args().collect();
if check[1] == 'sort'{
for arg in std::env::args().skip(2){
//sort
}
}
有更好的方法吗?
最佳答案
您可以使用 nth()
:
let second_arg = env::args().nth(1).expect("no second arg");
返回 Option<String>
.
它在语义上等同于调用 skip(1)
其次是 next()
.
更进一步,您可以使用模式匹配:
let mut args = env::args();
match args.nth(1).as_ref().map(|s| s.as_str()) {
// args has been consumed so it will iterate over the next elements
Some("sort") => for arg in args {
println!("arg: {}", arg);
},
_ => {},
}
需要从String
转换参数至 &str
为了能够使用 Some("sort")
原样。
或者,您可能希望使用命令行解析包,例如 clap .
关于rust - 如何检查命令行参数的第二个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51119143/