附录 B:运算符与符号速查 — 拆解
附录 B:运算符与符号速查
这份附录是什么: Rust 全部运算符和符号的词典,三张表。 用法:见到陌生符号回来查它在哪个语境出现、干什么。下文讲三张表的组织逻辑 和唯一值得记住的机制点;表本体当字典。
1. 顶层全景:三张表怎么切
表 B-1 运算符 能算东西的符号(+、%、-> 等),每行四列:
符号 | 用例 | 含义 | 可否重载(可重载则给出 trait 名)
表 B-2 独立符号 单独出现、不构成表达式的符号(如 _、..、@)
表 B-3 上下文符号 只在特定结构里出现的符号(路径的 ::、引用的 &、生命周期 'a、
泛型的 <T>、模式里的 => 等)
图说:分类轴是"符号出现在哪、扮演什么角色"——同一个 & 在表 1 是按位与、
在表 3 是借用,靠上下文区分,这正是 Rust 符号密度高的原因。2. 唯一值得记的机制:运算符重载
大多数运算符可以通过实现 std::ops 里对应的 trait 来重载(如 + 对应 Add,第 20 章的例子)。表 B-1 的第四列就是这张对照表:想让自己的类型支持 a + b,就去 impl Add for YourType1。
边界(第 20 章详述,这里一句话):不能发明新运算符,不能重载任意符号——只有语言已有的运算符、以及它们对应的 trait 可以;而 & 作为借用、:: 作为路径这类"结构性符号"不参与重载2。
3. 高频符号按语境归位
不必背表,记住几个"同一个符号多副面孔"的典型,查表时有方向:
| 符号 | 面孔 |
|---|---|
& | 借用(表 3)/ 按位与(表 1,可重载为 BitAnd) |
* | 解引用(表 3)/ 乘法(表 1,Mul)/ 裸指针类型 *const T(表 3) |
.. | 范围(表达式)/ 模式忽略剩余(第 19 章)/ 结构体更新语法 |
' | 字符字面量 'a' / 生命周期 'a |
! | 宏调用 println! / 逻辑非 / never 类型 |
| ` | ` |
4. 作者的判断与证据
- 附录本身无语义判断;重载机制的判断在第 20 章("只允许重载已有运算符")2。
判断(我们的,不是书里的): 三张表的分法是这份附录的真正设计—— 它承认 Rust 符号的语义是上下文驱动的,与其按符号聚合,不如按"你在代码的哪一层" 聚合。这也意味着读 Rust 报错时,符号本身给不了答案,它所在的结构才给。 如果错,会错在: 上下文分类偶有含糊(如
..横跨三表),真查起来可能要在两张表间跳; 但作为速查工具,这比按字母序好得多。
5. 可带走的
- 运算符能否重载、重载到哪个 trait——查表 B-1 第四列。
- 结构性符号(& 借用、:: 路径、'a 生命周期)不可重载。
- 同一符号多副面孔,先定位语境再查。
6. 原文地图
| 主题 | 原书章 | 原文位置 |
|---|---|---|
| 附录总述与三张表 | Appendix B: Operators and Symbols | text/30-apx-b-appendix-b-operators-and-symbols.txt:4(搜「glossary」) |
| 表 B-1 运算符(含重载列) | 同上 | text/30-apx-b-appendix-b-operators-and-symbols.txt:11(搜「Table B-1」) |
| 表 B-2 独立符号 | 同上 | text/30-apx-b-appendix-b-operators-and-symbols.txt:126(搜「Stand-Alone Syntax」) |
| 表 B-3 上下文符号 | 同上 | text/30-apx-b-appendix-b-operators-and-symbols.txt:153(搜「Path-Related Syntax」) |