我需要检查第二个元素以确定我正在对其余参数执行哪个操作。
这会遍历命令行参数并跳过第一个参数,因为它始终是程序名称。它还跳过第二个,因为它是我在列表上执行的操作:
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>
.
它在语义上等同于 callskip(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。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句