Rust 中的作用域、所有权语义与借用机制
1. 作用域概述
在深入了解所有权之前,我们需要先对作用域有一个简要的认识。作用域是变量和值存在的环境,每个声明的变量都与一个作用域相关联。在代码中,作用域由花括号 {}
表示,每当使用一个块表达式(即以花括号开始和结束的表达式)时,就会创建一个新的作用域。作用域可以相互嵌套,并且可以访问其父作用域中的项,但反之则不行。
以下是一个展示多个作用域和值的代码示例:
// scopes.rs
fn main() {
let level_0_str = String::from("foo");
{
let level_1_number = 9;
{
let mut level_2_vector = vec![1, 2, 3];
level_2_vector.push(level_1_number); // can access
} // level_2_vector goes out of scope here
level_2_vector.push(4); // no longer exists
} // level_1_number goes out of scope here
} // level_0_str goes out of scope here
为了便于解释,我们假设作用域从 0 开始编号。在上述代码中, main