2012-06-25 57 views
30

根據docsArray.include?使用==比較對象。我來自Java,在這種情況下(通常)通過.equals()完成,這很容易覆蓋特定對象。Ruby中的覆蓋==運算符

如何在Ruby中覆蓋==以允許我指定的行爲Array.include?爲我的特定對象?

非常感謝。

回答

61

在Ruby ==只是一個方法(在上面的一些語法糖讓你寫foo == bar而不是foo.==(bar))和重寫==就像你會任何其他方法:

class MyClass 
    def ==(other_object) 
    # return true if self is equal to other_object, false otherwise 
    end 
end 
+3

太棒了,謝謝。這比我預期的要簡單得多。 – lynks

+3

你還需要覆蓋hash和eql嗎?方法? – Vitalij

+0

@Vitalij eql?通常只是==的別名,並且如果您打算在散列和集合中使用它,則需要重寫散列。 – bluehallu