将等式定义为引用类型的身份识别?

3

我经常被诱惑将我的引用类型定义为Equatable,通过将==定义为===。这使我能够替换冗长的:

collection.contains(where: { $0 === object })

使用:

collection.contains(object)

但我有一种烦人的感觉,似乎我正在做一些不对的事情™。将相等定义为身份的缺点是什么?这是一个常见的模式吗?

1个回答

2

仅在不可能出现对象的两种不同表示时,将相等定义为身份才有用。否则,您将得到外观相同但在比较相等时失败的对象。

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

如果“一个实体-一个对象”的规则被打破,则您的对象在使用相等性的所有情况下都变得无用,例如哈希集、哈希映射和线性搜索。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接