作用域

1

作用域、绑定和名字可见性

4 分钟

C 程序员理解作用域,通常先想到名字可见性:

void handle(void)
{
    int offset = 0;

    {
        int len = 16;
        offset += len;
    }

    /* len 不可见,offset 仍然可见 */
}

Rust 的块作用域也有这个规则:

fn handle() {
    let mut offset = 0;

    {
        let len = 16;
        offset += len;
    }

    // len 不可见,offset 仍然可见
}

但 Rust 的作用域不只决定名字能不能用。它还会影响资源什么时候释放、绑定能不能被遮蔽、引用能不能继续存在,以及哪些名字能成为模块外的 API。

阅读更多