Rust 中的 match 和 if-let 之间的主要区别是什么?

LNK*_*005 14 rust

当我学习控制流时,我有点困惑。if-let我不明白和之间的区别match

fn main() {
    let some_u8_value = Some(8u8);
    // println!(" {} ", some_u8_value);
    if let Some(value) = some_u8_value {
        println!(" {} ", value);
    } else {
        println!("not a num");
    }

    match some_u8_value {
        Some(value) => println!(" {} ", value),
        None => println!("not a num"),
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么我们需要if-let

Mas*_*inn 26

为什么我们需要 if-let?

我们不需要它,它是一个方便功能。根据介绍它的RFC 160 :

[ if let] 允许可反驳的模式匹配,而无需完全匹配的语法和语义开销,也没有相应的额外的向右漂移。

今天测试和解包选项的惯用解决方案看起来像

match optVal {
    Some(x) => {
        doSomethingWith(x);
    }
    None => {}
}
Run Code Online (Sandbox Code Playgroud)

这是不必要的冗长,需要None => {}(或 _ => {}) 情况,并引入不必要的向右漂移(这引入了两级缩进,而正常条件会引入一级缩进)。

if[使用简单的and 的is_some问题说明unwrap]

if let 结构解决了所有这些问题,如下所示:

if let Some(x) = optVal {
    doSomethingWith(x);
}
Run Code Online (Sandbox Code Playgroud)