Rust 中的 if let 与 while let

2020-11-02  本文已影响0人  Gascognya
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

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

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

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

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

这些都是不被允许的。

上一篇 下一篇

猜你喜欢

热点阅读