如何使用Rust迭代器多次`if let`?

Fre*_*ios 3 rust

我有这个代码:

fn main() {
    let mut args = std::env::args();

    if let Some(name) = args.next() {
        if let Some(first) = args.next() {
            println!("One arg provided to {}: {}", name, first);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有可能有两个if let?我试过了:

fn main() {
    if let Some(name) = args.next() && Some(first) = args.next() {
        println!("one arg provided to {}: {}", name, first);
    }
}
Run Code Online (Sandbox Code Playgroud)

fn main() {
    if let Some(name) = args.next() && let Some(first) = args.next() {
        println!("one arg provided to {}: {}", name, first);
    }
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用.这该怎么做?

mus*_*tze 5

您可以使用"融合"迭代器将多个值收集到元组中并使用if let它:

fn main() {
    let mut args = std::env::args().fuse();
    if let (Some(a), Some(b)) = (args.next(), args.next()) {
        println!("{}, {}", a, b);
    }
}
Run Code Online (Sandbox Code Playgroud)

(在操场上的例子)

fuse保证在next返回None一次后,每次通话next都会给出None.