- 要么拥有任意数量的不可变引用(
&T)。 - 要么拥有唯一一个可变引用(
&mut T)。 - 两者不能同时存在。
- 如果违反借用规则(例如同时获取可变和不可变借用),程序不会编译失败,而是会在运行时触发 panic。
- 它适用于单线程环境。
rust
use std::cell::RefCell;
fn main() {
let v = RefCell::new(10); // 创建一个可变的引用计数器
{ // 只读借用
let v1 = v.borrow(); // 只读借用
println!("v1 只读借用: {}", v1);
}
// v1 只读借用离开作用域
{ // 可变借用
let mut v2 = v.borrow_mut(); // 只写借用
*v2 = 20;
}
// v2 可变借用离开作用域
println!("v2 只写借用: {}", v.borrow()); // 只读借用
}