我知道eql?Hashes使用它来查看对象是否与键*匹配,而您匹配def==(rb)如果您想支持==运算符,但哈希不使用==一定有充分的理由。这是为什么?你什么时候会有==和eql的定义?不是等价的(例如,一个是另一个的别名)?同样,为什么除了to_a之外还要有to_ary?这个问题是对answer的回应有人给了我anotherquestion.*当然一个Hash也假设eql?==true表示哈希码相等。此外,重写相等基本上是一个糟糕的主意吗?? 最佳答案 ==检查两个值是否相等,而eql?检查它们是否相等且类型相同。irb(mai
在Java和C#等语言中,如果要重写相等运算符,则还必须重写散列方法。Whenevera.equals(b),thena.hashCode()mustbesameasb.hashCode()据我所知,这些语言中的一些内部数据结构依赖于上述条件成立才能正常运行。我想知道在Ruby中是否也是如此。重写==操作符时是否需要重写对象的hash方法?听说重写==时需要重写eql?。这些声明背后的原因是什么?如果您不覆盖这些声明,会发生什么情况? 最佳答案 不,您不需要覆盖eql?和hash方法。但是,正如tadman提到的,您应该覆盖它们。你
在thispresentation演讲者创建了一个值(value)类。在实现它时,他重写了#eql?,并说在Java开发中,惯用语是每当你重写#eql?时,你必须重写#散列。classWeight#...defhashpounds.hashenddefeql?(other)self.class==other.class&&self.pounds==other.poundsendalias:==eql?end首先,什么是#hash方法?我可以看到它返回一个整数。>1.hash=>-3708808305943022538>2.hash=>1196896681607723080>1.hash