共享和唯一的借用
Rust 限制了借用值的方式:
- 在任何给定时间,你都可以有一个或多个
&T
值,或者 - 你可以有且只有一个
&mut T
值。
fn main() { let mut a: i32 = 10; let b: &i32 = &a; { let c: &mut i32 = &mut a; *c = 20; } println!("a: {a}"); println!("b: {b}"); }
- 上述代码无法编译,因为
a
同时作为可变值(通过c
)和不可变值(通过b
)被借用。 - 将
b
的println!
语句移到引入c
的作用域之前,这段代码就可以编译。 - 这样更改后,编译器会发现
b
只在通过c
对a
进行新可变借用之前使用过。这是借用检查器的一个功能,名为“非词法作用域生命周期”。