所以我有一個類,其中我需要重寫相等運算符。這並不難。但是除非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