if let

在一些场合下,用 match 匹配枚举类型并不优雅。
if let 在这样的场合要简洁得多,并且允许指明数种失败情形下的选项:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

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);
}
}
```
<br/>
添加微信 公众号更多内容
wechat gzh