if let语句
if let语句是一种特殊的match语句的简写。通常在match只有简单的一两个分支的情况下,用来简写match语句的。
例:以下两个语句块等价。
let v = Some(3);
match v {
Some(3) => println("three");
_ => ()
}
该语句等价于。
let v = Some(3);
if let Some(3) = v {
println("three");
}
可以看到if let语句被用作变量的比较。
另外,if let语句可以搭配else使用。并且可以解构对象。
enum Coin {
Penny,
Nickel,
Dime,
Quarter(UsState)
}
let coin = Coin::Quarter(UsState::Alaska);
let mut count = 0;
match coin {
Coin::Quarter(state) => println!("State quarter from {:?}", state),
_ => count += 1,
}
等价于:
enum Coin {
Penny,
Nickel,
Dime,
Quarter(UsState)
}
let coin = Coin::Quarter(UsState::Alaska);
let mut count = 0;
if let Coin::Quarter(state) = coin { // 判断,并解构state的值。
println!("State quarter form {:?}",state);
} else {
count += 1;
}
最后,if let可以搭配while使用:
loop {
match option { // 若option变量可以匹配Some,则一直循环。
Some(x) => println!("{}", x),
_ => break,
}
}
等价于:
while let Some(x) = option { // 若option变量可以匹配Some,则一直循环。
println!("{}", x);
}
简单总结一下:
- if let是一个简单的判断语句
- if let可以对类型对象进行解构。
- if let语句等价于match。
- if let可以搭配else子句。if let ... else ...
- if let可以搭配while语句。while if let ... { ... }