2.5.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 理解为向编译器发出的指令:确保独占访问,而非可变访问。

最后修改 August 23, 2026: 更新 (499855b16)