Rust是基于表达式的编程语言,有且仅有两种语句 (statement):

    1. 声明语句 (declaration statement),比如进行变量绑定的let语句。
    2. 表达式语句 (expression statement),它通过在末尾加上分号;来将表达式变成语句,
      丢弃该表达式的值,一律返回元类型()

    表示式总是返回一个值,但是语句不返回值或者返回(),所以以下代码会报错:

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

    值得注意的是,在Rust中赋值 (如x = 5) 也是一个表达式,返回元类型值()

    1. for var in expression {
    2. code
    3. }

    其中expression是一个迭代器 (iterator),具体的例子为0..10 (不包含最后一个值),
    或者[0, 1, 2].iter()

    Rust中的while循环与C语言中的类似。对于无限循环,Rust有一个专用的关键字loop
    如果需要提前退出循环,可以使用关键字break或者continue
    还允许在循环的开头设定标签 (同样适用于for循环):

    Rust中的match表达式非常强大,首先看一个例子:

    1. let day = 5;
    2. 0 | 6 => println!("weekend"),
    3. 1 ... 5 => println!("weekday"),
    4. }
    1. let x = 1;
    2. match x {
    3. e @ 1 ... 5 => println!("got a range element {}", e),
    4. _ => println!("anything"),
    5. }

    使用ref关键字来得到一个引用:

    再看一个使用match表达式来解构元组的例子:

    1. let pair = (0, -2);
    2. match pair {
    3. (0, y) => println!("x is `0` and `y` is `{:?}`", y),
    4. (x, 0) => println!("`x` is `{:?}` and y is `0`", x),
    5. _ => println!("It doesn't matter what they are"),
    6. }

    的这种解构同样适用于结构体或者枚举。如果有必要,
    还可以使用..来忽略域或者数据:

    1. struct Point {
    2. x: i32,
    3. y: i32,
    4. let origin = Point { x: 0, y: 0 };
    5. match origin {
    6. Point { x, .. } => println!("x is {}", x),
    7. }
    8. enum OptionalInt {
    9. Value(i32),
    10. Missing,
    11. }
    12. let x = OptionalInt::Value(5);
    13. match x {
    14. OptionalInt::Value(i) if i > 5 => println!("Got an int bigger than five!"),
    15. OptionalInt::Value(..) => println!("Got an int!"),
    16. }