Rust 如何检查命令行参数的第二个元素?
我需要检查第二个元素,以确定我对其余参数执行的操作 这将遍历命令行参数并跳过第一个参数,因为它始终是程序名。它还跳过了第二个,因为这是我在列表上执行的操作:Rust 如何检查命令行参数的第二个元素?,rust,Rust,我需要检查第二个元素,以确定我对其余参数执行的操作 这将遍历命令行参数并跳过第一个参数,因为它始终是程序名。它还跳过了第二个,因为这是我在列表上执行的操作: 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){
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
}
}
让我们检查:Vec=env::args().collect();
如果选中[1]=“排序”{
对于std::env::args()中的arg。跳过(2){
//分类
}
}
有更好的方法吗?您可以使用:
返回一个选项
它在语义上等同于调用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
,以便能够按原样使用某些(“排序”)
或者,您可能希望使用命令行解析包,例如。如果需要检查参数中是否存在标志,您可以使用: 实际上,您应该使用命令行解析包
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);
},
_ => {},
}
use std::env;
fn main() {
let mut args = env::args()
.skip(1) // skip program name
.peekable(); // allow looking forward one
match args.peek().map(|x| x.as_ref()) {
Some("--option1") => {
args.next(); // Skip the flag
println!("handle option 1");
}
Some("--option2") => {
args.next(); // Skip the flag
println!("handle option 2");
}
_ => {
println!("handle no option");
}
}
}