我知道 eql 吗? Hashes 使用它来查看对象是否与键 * 匹配,并且您这样做

def ==(rb)

如果你想支持 == 操作符,但必须有一个很好的理由让 Hashes 不使用 == 来代替。这是为什么?你什么时候会有 == 和 eql 的定义?不等价的(例如,一个是另一个的别名)?

同理,为什么除了to_a还要to_ary呢?

这个问题是为了回答某人在 answer 上给我的 another question
* 当然,Hash 也假设 eql? == true 表示哈希码相等。

另外,覆盖相等基本上是一个可怕的想法吗? ?

最佳答案

我不知道在 ruby​​ 中这个特定选择的原因,但我只想指出平等是一个困难的概念。

例如,Common Lisp 有 eq、eql、equal、equalp,就此而言 =

能够区分对同一对象的两个引用、具有相同值的相同类型的两个不同对象、具有相同值但类型不同的两个对象等之间的区别非常有用。 有多少变化是有意义的取决于语言中什么是有意义的。

如果我没记错的话(我不使用 ruby​​),rubys 谓词实现了其中的三种情况

== 是值相等

情商?是值和类型相等

平等的?仅对同一对象为真

关于ruby - Ruby 有 == AND eql 有什么好的理由吗? ? (类似于 to_a 和 to_ary),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/770418/

10-13 05:29