4. Rust基件:RefCell
上一条:Cell 下一条:Mutex/RwLock
对于没有实现`Copy`的类型,例如`String`和`Vec<T>`,要实现多个不可变借用内部成员的可变性,就需要使用`RefCell<T>`,常用方法主要是
- 获得内部T的不可变借用:使用`borrow()`方法
- 获得内部T的可变借用:使用`borrow_mut()`方法
虽然获得了对不可变借用内部成员的可变修改能力,但是借用的规则然起作用,下面是一组单元测试,注意RefCell的借用规则在编译期不会检查,但是运行期会检查,如果违反会在运行期 panic。
测试1:x 一旦borrow_mut,就不可同时 borrow
fn test1(){
let x = RefCell::new(5);
let a = x.borrow();
let b = x.borrow_mut(); // 运行期 panic
}
测试2:x 的borrow可多次
fn test2(){
let x = RefCell::new(5);
let a = x.borrow();
let b = x.borrow();
}
测试3:y 是 x的clone,x 和 y 都可多次borrow
fn test3(){
let x = RefCell::new(5);
let a = x.borrow();
let b = x.borrow();
let y = x.clone();
let c = y.borrow();
let d = y.borrow();
}
测试4:y 是 x的clone,x 和 y 一起,只能有一个borrow_mut
fn test4(){
let x = RefCell::new(5);
let a = x.borrow_mut();
let y = x.clone();
let c = y.borrow_mut();// 运行期 panic
}
测试5:y 是 x的clone,x 和 y 一起,可多次borrow
fn test5(){
let x = RefCell::new(5);
let a = x.borrow();
let y = x.clone();
let c = y.borrow_mut();
}
测试6:y 是 x的clone,x 和 y 一起,只能有一个borrow_mut,可变借用在超出作用域后归还,即可再次可变借用
fn test6(){
let x = RefCell::new(5);
let y = x.clone();
{
let a = x.borrow_mut();
}
let c = y.borrow_mut();
}
相关推荐
atomic_refcell:用于Rust的线程安全RefCell
atomic_refcell 用于Rust的线程安全RefCell。
qcell-RefCell的静态检查替代品-Rust开发
静态检查的RefCell替代品RefCell的替代品,而不是在运行时出现惊慌,将产生编译错误。 文档静态检查的RefCell替代品RefCell的替代品,而不是在运行时出现恐慌,将产生编译错误。 文档请参阅包装箱文档。 许可证您可以选择根据Apache许可证版本2或MIT许可证对本项目进行许可。 (请参阅LICENSE-APACHE和LICENSE-MIT)。 贡献除非您明确声明,否则您有意提交任何包含在您的板条箱中的贡献,如Apache-2.0中所定义
38 014RefCell介绍.mp4
38 014RefCell介绍.mp4
《Rust in Action》 by Timothy Samuel McNamara
Rust in Action 是一本面向想要探索 Rust 编程语言世界的中级程序员的书。它适用于可能已经用尽网络上的免费资料但仍想了解更多信息的人。它与 Rust 编程的其他材料不同,因为它还教您有关系统编程的知识。您将能够更多地了解 CPU 的工作原理、计算机如何计时、指针是什么以及您的网卡和键盘如何告诉 CPU 它们已准备好读取输入。 从系统编程书籍的角度来看,它实际上也是独一无二的 - 因为几乎每个示例都适用于 Windows!如果你是那种喜欢实际例子的学习者,你会喜欢阅读这本书。
《Rust in Action》 by Timothy Samuel McNamara(PDF文档)
《Rust in Action》 by Timothy Samuel McNamara(PDF文档) Rust in Action 是一本面向想要探索 Rust 编程语言世界的中级程序员的书。它适用于可能已经用尽网络上的免费资料但仍想了解更多信息的人。它与 Rust 编程的其他材料不同,因为它还教您有关系统编程的知识。您将能够更多地了解 CPU 的工作原理、计算机如何计时、指针是什么以及您的网卡和键盘如何告诉 CPU 它们已准备好读取输入。 从系统编程书籍的角度来看,它实际上也是独一无二的 - 因为几乎每个示例都适用于 Windows!如果你是那种喜欢实际例子的学习者,你会喜欢阅读这本书。 收起



