Vector 如何匹配迭代器';什么项目?

Vector 如何匹配迭代器';什么项目?,vector,rust,Vector,Rust,匹配迭代器项的最惯用方法是什么?例如,如果我们使用命令行参数,那么对其中一个项使用模式匹配的最佳方法是什么?这就是我正在做的,我不能100%确定为什么需要as_ref(),为什么&args[0]不起作用: let args: Vec<String> = env::args().skip(1).collect(); match args[0].as_ref() {...} let args:Vec=env::args().skip(1.collect(); 匹配参数[0]。作为\u

匹配迭代器项的最惯用方法是什么?例如,如果我们使用命令行参数,那么对其中一个项使用模式匹配的最佳方法是什么?这就是我正在做的,我不能100%确定为什么需要
as_ref()
,为什么
&args[0]
不起作用:

let args: Vec<String> = env::args().skip(1).collect();
match args[0].as_ref() {...}
let args:Vec=env::args().skip(1.collect();
匹配参数[0]。作为\u ref(){…}
由于
env::args()
返回一个迭代器(
args
),您可以像处理任何其他迭代器一样处理它。如果要与给定项目匹配一次,最简单的方法是:

use std::env;

fn main() {
    let mut args = env::args().skip(1);

    match args.next() {
        Some(x) => {
            if &x == "herp derp" { ... }
        },
        None => ()
    }
}
由于
env::args()
返回一个迭代器(
args
),因此可以像处理任何其他迭代器一样处理它。如果要与给定项目匹配一次,最简单的方法是:

use std::env;

fn main() {
    let mut args = env::args().skip(1);

    match args.next() {
        Some(x) => {
            if &x == "herp derp" { ... }
        },
        None => ()
    }
}

由于与字符串的匹配在过去已经得到了回答(例如),我建议处理与程序参数的匹配,或者更一般地说,与迭代器项的匹配。谢谢,这个链接是我实际了解as_ref()的地方。我使用了它,它工作得很好,但是我不明白为什么需要对该索引调用该方法以便模式中的
字符串
被视为
&str
字符串片段,并且可以与
匹配
正文中的片段进行匹配。由于过去已经回答了字符串匹配问题(例如),我建议处理与程序参数的匹配问题,或者更一般地说,与迭代器项的匹配问题。谢谢,这个链接是我真正了解as_ref()的地方。我使用了它,它工作得很好,但是我不明白为什么需要对该索引调用该方法以便模式中的
字符串
被视为
&str
字符串片段,并且可以与
匹配
正文中的片段相匹配。@AliYazdani现在修改了答案以实际匹配参数的值:)。美丽!谢谢哈哈“herp derp”。还有一个问题(如果你想回答的话),我最初使用Vec是因为我认为需要将参数分配给堆,因为直到运行时才知道大小。是什么机制使您的版本在不明确编译器数据要求的情况下工作?@AliYazdani参数字符串仍然位于堆上;只是它们不需要被收集到
Vec
中,就可以使用它们。@AliYazdani我现在修改了答案,使之与参数的值匹配:)。美丽!谢谢哈哈“herp derp”。还有一个问题(如果你想回答的话),我最初使用Vec是因为我认为需要将参数分配给堆,因为直到运行时才知道大小。是什么机制使您的版本在不明确编译器数据要求的情况下工作?@AliYazdani参数字符串仍然位于堆上;只是它们不需要被收集到
Vec
中,就可以使用它们。