Cell内部可变性
通过Cell和RefCell实现内部可变性,绕过借用规则在不可变引用下修改数据。 · 难度:入门 · +15XP
Cell内部可变性
Cell 和 RefCell 提供内部可变性:Cell 适用于 Copy 类型,通过 get/set 方法操作;RefCell 适用于非 Copy 类型,通过 borrow/borrow_mut 在运行时检查借用规则。注意:RefCell 违反借用规则会导致运行时 panic。
use std::cell::{Cell, RefCell};
fn main() {
// Cell 示例(Copy类型)
let cell = Cell::new(42);
cell.set(100);
println!("Cell value: {}", cell.get());
// RefCell 示例(非Copy类型)
let refcell = RefCell::new(vec![1, 2, 3]);
{
let mut borrowed = refcell.borrow_mut();
borrowed.push(4);
}
{
let borrowed = refcell.borrow();
println!("RefCell value: {:?}", *borrowed);
}
}