我知道 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/