2.5.1 心智模型的种子
1分钟内可阅读完
译文 · 基于 Learning Rust
心智模型的种子
原文链接: https://quinedot.github.io/rust-learning/st-model.html
有些人觉得把共享引用(&T)和独占引用(&mut T)想成下面这样会有帮助:
&T相当于经编译器检查的RwLockReadGuard- 你可以同时拥有任意多个
&mut T相当于经编译器检查的RwLockWriteGuard- 同一时刻只能有一个,且存在时不能再有
RwLockReadGuard
- 同一时刻只能有一个,且存在时不能再有
独占性是关键。
&mut T 因显而易见的原因常被称为「可变引用」。由此延伸,&T 也常被称为「不可变引用」。然而,我认为把 &mut T 称为独占引用、把 &T 称为共享引用更准确、也更一致。
本指南目前不会深入探讨共享可变性(更常见的叫法是内部可变性),但你在 Rust 学习路上迟早会遇到这一概念。这里要强调的一点是,它使得在 &T 背后也能发生修改,因此「不可变引用」这个名称具有误导性。
还有些情况下,&mut T 的重要性质是它保证的独占性,而非通过它进行变更的能力。如果你在未做任何实际修改时,仍因 &mut T 而遇到借用错误感到恼火,不妨把 &mut T 理解为向编译器发出的指令:确保独占访问,而非可变访问。