条件分支
- if
- if let
- match
if 表达式
Rust 中的 if 表达式基本就是如下几种形式:
1. // 形式 1
2. if expr1 {
4. }
6. // 形式 2
7. if expr1 {
9. }
10. else {
12. }
14. // 形式 3
15. if expr1 {
17. }
18. else if expr2 {
19. // else if 可多重
20. }
21. else {
23. }
相对于 C 系语言,Rust 的 if 表达式的显著特点是:
- 判断条件不用小括号括起来;
- 它是表达式,而不是语句。
鉴于上述第二点,因为是表达式,所以我们可以写出如下代码:
1. let x = 5;
3. let y = if x == 5 {
4. 10
5. } else {
6. 15
7. }; // y: i32
或者压缩成一行:
1. let x = 5;
3. let y = if x == 5 { 10 } else { 15 }; // y: i32
if let
我们在代码中常常会看到 if let 成对出现,这实际上是一个 match 的简化用法。直接举例来说明:
1. let x = Some(5);
3. if let Some(y) = x {
4. println!("{}", y); // 这里输出为:5
5. }
7. let z = if let Some(y) = x {
8. y
9. }
10. else {
11. 0
12. };
13. // z 值为 5
上面代码等价于
1. let x = Some(5);
2. match x {
3. Some(y) => println!("{}", y),
4. None => ()
5. }
7. let z = match x {
8. Some(y) => y,
9. None => 0
10. };
设计这个特性的目的是,在条件判断的时候,直接做一次模式匹配,方便代码书写,使代码更紧凑。
match
Rust 中没有类似于 C 的 switch 关键字,但它有用于模式匹配的 match,能实现同样的功能,并且强大太多。
match 的使用非常简单,举例如下:
1. let x = 5;
3. match x {
4. 1 => {
5. println!("one")
6. },
7. 2 => println!("two"),
8. 3 => println!("three"),
9. 4 => println!("four"),
10. 5 => println!("five"),
11. _ => println!("something else"),
12. }
注意,match 也是一个表达式。match 后面会专门论述,请参见 模式匹配 这一章。
