2012-06-25 4 views
30

Entsprechend der docs, Array.include? verwendet den == Vergleich auf Objekten. Ich komme aus Java, wo solche Dinge (normalerweise) mit .equals() getan werden, die für ein bestimmtes Objekt leicht zu überschreiben ist. Wie kann ich == in Ruby überschreiben, um das Verhalten von Array.include anzugeben für mein spezielles Objekt?Override == Operator in Ruby

Vielen Dank.

Antwort

61

In Ruby == ist nur eine Methode (mit einer gewissen Syntax Zucker auf dem Sie foo == bar statt foo.==(bar) schreiben) und Sie == außer Kraft setzen, wie Sie gerade jede andere Methode:

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

fantastisch, danke. Das war viel einfacher als ich erwartet hatte. – lynks

+3

Müsstest du auch Hash und eql überschreiben? Methoden? – Vitalij

+0

@Vitalij eql? ist normalerweise nur ein Alias ​​für ==, und Sie müssen Hash überschreiben, wenn Sie beabsichtigen, ihn in Hashes und Sets zu verwenden. – bluehallu