美文网首页
Rust 中的 if let 与 while let

Rust 中的 if let 与 while let

作者: Gascognya | 来源:发表于2020-11-02 18:16 被阅读0次
    let v = Some(5);
    
    if let Some(n) = v {
        println!("{}", n);
    }
    
    while let Some(n) = v {
        println!("{}", n);
    }
    

    上述语句明显是合理的,但我们接着往下看:

    let a = Some(5);
    
    if a.unwrap() == 5 {
        println!("a is 5");
    } else if let Some(6) = a{
        println!("a is 6");
    } else if a == Some(7) {
        println!("a is 7");
    } else {
        println!("ohhhhhh");
    }
    

    if let是可以在普通if中使用的,那我们换一种想法

    不将if let看成一个固定组合

    if let Some(6) = a,只是个普通的if表达式,而let Some(6) = a是一个特殊布尔表达式

    let Some(6) = a

    我们来观察下这个语句,他与赋值表达式很像,但有许多不同

    • 普通let语句是进行赋值操作,而这个是一种判别等价,且带有赋值功能语句
    • 普通let语句格式是,let 变量名 = 表达式,而这个是if 匹配模式 = 变量名
    • 普通let语句,返回值恒为(),而该表达式返回布尔值,代表是否匹配成功。

    说到同时具有判断和赋值功能的,我不由想起python新引入的:=,例如if a := func():但两者有明细区别,虽然都可以赋值,但一个是判断等价,一个是判断内容是否为空。

    但是不能单独拿出来作为布尔表达式

    println!("! {:?}", let Some(42) = a)
    let b: bool = let Some(42) = a
    

    这些都是不被允许的。

    相关文章

      网友评论

          本文标题:Rust 中的 if let 与 while let

          本文链接:https://www.haomeiwen.com/subject/dvimvktx.html