Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 如何检查命令行参数的第二个元素?_Rust - Fatal编程技术网

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");
        }
    }
}