代码块表达式 Block

一个代码块 (block expression) 就是一个表达式, 所以它可以为一个变量赋值. 看下面的例子:

fn main() {
    let x: i32 = if cfg!(target_os = "linux") {
        42
    } else {
        43
    };
    assert_eq!(x, 42);
}

要注意分号的位置 ;, 在 if 语句的最后一个表达式是不包含分号的. 另一个类似的例子:

fn main() {
    let x = {
        let mut sum = 0;
        for i in 1..10 {
            sum += i;
        }
        sum
    };
    assert_eq!(x, 45);
}

有时, 会在代码块表过式中自动声明本地的临时变量, 该变量的作用域只限于代码块内部 ( 即 { ... }). 如果在代码块之外有同名的变量, 那么该变量会在代码块内部被遮盖掉 (shadow). 看下面的例子:

fn main() {
    let num: i32 = 42;
    for num in 0_i32..10 {
        println!("{num}");
    }
    assert_eq!(num, 42);
}

为块表达式设置属性

const 块表达式

unsafe 块表达式

参考 unsafe 块表达式

async 块表达式

参考 理解 async/await