if let
在一些场合下,用 match 匹配枚举类型并不优雅。
if let 在这样的场合要简洁得多,并且允许指明数种失败情形下的选项:
代码语言:txt复制 let s = Some("从0到Go语言微服务架构师");
let s1: Option<i32> = None;
let s2: Option<i32> = None;
// 如果 `let` 将 `s` 解构成 `Some(i)`,则执行语句块(`{}`)
if let Some(i) = s {
println!("已上车 {:?}!", i);
}
// 如果要指明失败情形,就使用 else:
if let Some(i) = s1 {
println!("Matched {:?}!", i);
} else {
// 解构失败。切换到失败情形。
println!("不匹配。");
};
// 提供另一种失败情况下的条件。
let flag = false;
if let Some(i) = s2 {
println!("Matched {:?}!", i);
// 解构失败。使用 `else if` 来判断是否满足上面提供的条件。
} else if flag {
println!("不匹配s2");
} else {
// 条件的值为 false。于是以下是默认的分支:
println!("默认分支");
};
输出
已上车 "从0到Go语言微服务架构师"!
不匹配。
默认分支
```
# while let
// 将 `optional` 设为 `Option<i32>` 类型
let mut num = Some(0);
// 当 `let` 将 `optional` 解构成 `Some(i)` 时,就
// 执行语句块(`{}`)。否则就 `break`。
while let Some(i) = num {
if i > 9 {
println!("{},quit!",i);
num = None;
} else {
println!("`i` is `{:?}`. Try again.", i);
num = Some(i 1);
}
}
代码语言:txt复制