美文网首页
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