代码块和作用域

A block in Rust contains a sequence of expressions, enclosed by braces {}. Each block has a value and a type, which are those of the last expression of the block:

fn main() {
    let z = 13;
    let x = {
        let y = 10;
        println!("y: {y}");
        z - y
    };
    println!("x: {x}");
}

If the last expression ends with ;, then the resulting value and type is ().

作用域和遮蔽(Shadowing)

变量的作用域仅限于封闭代码块内。

你可以隐藏变量,位于外部作用域的变量和 相同作用域的变量都可以:

fn main() {
    let a = 10;
    println!("before: {a}");
    {
        let a = "hello";
        println!("inner scope: {a}");

        let a = true;
        println!("shadowed in inner scope: {a}");
    }

    println!("after: {a}");
}
This slide should take about 5 minutes.
  • 你可以通过更改块的最后一行,来展示块值的变化情况。例如,添加/移除分号或使用 return
  • Show that a variable’s scope is limited by adding a b in the inner block in the last example, and then trying to access it outside that block.
  • Shadowing is different from mutation, because after shadowing both variable’s memory locations exist at the same time. Both are available under the same name, depending where you use it in the code.
  • A shadowing variable can have a different type.
  • 隐藏起初看起来会有些晦涩,但是它很便于存 .unwrap() 之后的得到的值。