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
这些都是不被允许的。