## Rust 的比较特性:总结
Rust 使用四个核心特性 – `PartialEq`/`Eq` 和 `PartialOrd`/`Ord` – 来定义相等性和排序的方式,这对于集合、排序和算法至关重要。`Eq` 意味着 `PartialEq`,`Ord` 意味着 `Eq` 和 `PartialOrd`,从而建立了一种层级关系。`Ord` 代表一个*完全*顺序(总是可比较的),而 `PartialEq`/`PartialOrd` 允许进行*部分*比较,处理诸如浮点数中的 NaN 之类的情况,在这些情况下直接比较并非总是被定义的。
这些特性不仅仅是关于运算符;它们强制执行代数定律(自反性、对称性、传递性),确保可预测的行为。`f64` 仅实现 `PartialEq`/`PartialOrd`,因为 NaN 违反了这些定律。
对于简单类型,派生这些特性是高效且正确的。然而,通常需要自定义逻辑,尤其是在默认的词法排序不理想时(例如,优先考虑发布版本而不是预发布版本)。像 `sort_by_key`、`Reverse` 和 `Ordering::then_with` 这样的工具可以帮助构建复杂的比较器。
在部分比较和完全比较之间进行选择,以及理解特性边界(例如 `BTreeMap` 的 `Ord`),对于编写健壮且符合惯例的 Rust 代码至关重要。性能考虑也很重要 – 优先选择更便宜、更具选择性的比较键以提高效率。
流行的文字游戏Wordle并非最近才出现;它的根源可以追溯到1973年的一款名为WORD的基于文本的游戏,该游戏发表在《101 Computer Games》中。与早期的猜谜游戏如Jotto不同,WORD会反馈正确*和*存在的字母,模仿了Wordle的功能。WORD由高中生查尔斯·雷德创作,是Digital Equipment Corp.推广BASIC编程在学校中普及的一系列BASIC猜谜游戏中的一部分。
这些游戏源于更早的程序,如GUESS,并由此衍生出HI-LO、NUMBER以及更复杂的游戏,如BAGELS(基于数字的Mastermind)和HURKLE(基于网格的寻猎游戏)。除了数字和字母猜谜,这一概念还扩展到战斗模拟,如TARGET和原始版本的 Battleship(SALVO)。
虽然计算机努力*猜测*人类思想导致了不太成功的“反向”猜谜游戏,如ANIMAL,但计算机隐藏信息的简单结构证明了其早期编程的理想性,并孕育了丰富多彩的互动猜谜游戏历史——许多游戏现在可以在网上玩。