如何在 Rust 迭代器中使用多个“if let”?

6

我有这段代码:

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

是否可以有两个if let呢?我尝试了以下代码:

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

并且

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

但是这并不起作用。如何解决这个问题?

有新的方法来做这件事吗? - cdecompilador
@cdecompilador 【仍在开发中】(https://github.com/rust-lang/rust/issues/53667)。您可以在[这里](https://rust-lang.github.io/rfcs/2497-if-let-chains.html)获得更多信息。 - Boiethios
1个回答

10
您可以使用“融合”迭代器将多个值收集到元组中,并使用if let语句进行操作:
fn main() {
    let mut args = std::env::args().fuse();
    if let (Some(a), Some(b)) = (args.next(), args.next()) {
        println!("{}, {}", a, b);
    }
}

(示例演示)

fuse 保证在 next 返回 None 一次后,每次调用 next 都会返回 None


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接