• 条件分支
    • if 表达式
    • if let
    • match

    条件分支

    • if
    • if let
    • match

    if 表达式

    Rust 中的 if 表达式基本就是如下几种形式:

    1. // 形式 1
    2. if expr1 {
    3. }
    4. // 形式 2
    5. if expr1 {
    6. }
    7. else {
    8. }
    9. // 形式 3
    10. if expr1 {
    11. }
    12. else if expr2 {
    13. // else if 可多重
    14. }
    15. else {
    16. }

    相对于 C 系语言,Rust 的 if 表达式的显著特点是:

    1. 判断条件不用小括号括起来;
    2. 它是表达式,而不是语句。

    鉴于上述第二点,因为是表达式,所以我们可以写出如下代码:

    1. let x = 5;
    2. let y = if x == 5 {
    3. 10
    4. } else {
    5. 15
    6. }; // y: i32

    或者压缩成一行:

    1. let x = 5;
    2. let y = if x == 5 { 10 } else { 15 }; // y: i32

    if let

    我们在代码中常常会看到 if let 成对出现,这实际上是一个 match 的简化用法。直接举例来说明:

    1. let x = Some(5);
    2. if let Some(y) = x {
    3. println!("{}", y); // 这里输出为:5
    4. }
    5. let z = if let Some(y) = x {
    6. y
    7. }
    8. else {
    9. 0
    10. };
    11. // z 值为 5

    上面代码等价于

    1. let x = Some(5);
    2. match x {
    3. Some(y) => println!("{}", y),
    4. None => ()
    5. }
    6. let z = match x {
    7. Some(y) => y,
    8. None => 0
    9. };

    设计这个特性的目的是,在条件判断的时候,直接做一次模式匹配,方便代码书写,使代码更紧凑。

    match

    Rust 中没有类似于 C 的 switch 关键字,但它有用于模式匹配的 match,能实现同样的功能,并且强大太多。

    match 的使用非常简单,举例如下:

    1. let x = 5;
    2. match x {
    3. 1 => {
    4. println!("one")
    5. },
    6. 2 => println!("two"),
    7. 3 => println!("three"),
    8. 4 => println!("four"),
    9. 5 => println!("five"),
    10. _ => println!("something else"),
    11. }

    注意,match 也是一个表达式。match 后面会专门论述,请参见 模式匹配 这一章。