将相等性定义为引用类型的标识?

Define equality as identity for reference types?

我经常想通过将 == 定义为 === 来使我的引用类型 Equatable。这允许我举一个例子来代替冗长的:

collection.contains(where: { [=10=] === object })

与:

collection.contains(object)

但我总觉得自己做错了什么™。将平等定义为身份有什么缺点?这是常见的模式吗?

将相等定义为同一性仅在不可能对一个对象进行两种不同表示的情况下才有用。否则你最终会得到看起来相同的对象,但在比较相等性时会失败。

当您保留对象缓存时,这是可以的,确保相同的实体由单个对象表示。

如果规则 "one entity-one object" 被破坏,您的对象将在所有使用相等性的情况下变得无用,例如哈希集、哈希映射和线性搜索。