所以我有一个类,其中我需要重写相等运算符。这并不难。但是除非my_obj.hash对于两个正在比较的对象是相等的,否则不会使用自定义相等运算符。所以我们需要重写散列()在Ruby中制作对象哈希的最佳方法是什么?
我有点卡住最好的方式来做到这一点。我的对象嵌入了另外三个对象实例。我的例子中看到,对于简单的实例瓦尔你可以只取瓦尔的哈希自己:
[var1, var2, var3].hash
更具体地说,我班有实例瓦尔三个嵌入对象,我们姑且称之为:
一个 B1 B2
我的对象的两个实例是相等如果
object1.B1 == object2.B1 && object1.B2 == object2.B2 ||
object1.B1 == object2.B2 && object1.B2 == object2.B1
在换句话说,COLLEC无论分配给哪个特定的变量,B1和B2都有相同的两个对象。
B1和B2也有自定义等式机制。
我只是不清楚重写hash()的最佳策略。
对不起,如果这个例子是抽象的,我试图避免发布很多代码。
如果'B1'和'B2'是不可取的,我支持这种技术。你的'hash'方法就像'return Set [self.B1,self.B2] .hash'一样简单。 – 2014-11-02 02:01:16