2012-06-25 33 views
30

Theo số docs, Array.include? sử dụng so sánh == trên đối tượng. Tôi đến từ Java, nơi những thứ như vậy (thường) được thực hiện với .equals() dễ dàng ghi đè cho một đối tượng cụ thể.Toán tử ghi đè == trong Ruby

Làm cách nào để ghi đè == trong Ruby để cho phép tôi chỉ định hành vi của Array.include? cho đối tượng cụ thể của tôi?

Rất cám ơn.

Trả lời

61

Trong Ruby == chỉ là một phương pháp (với một số đường cú pháp trên cho phép bạn viết foo == bar thay vì foo.==(bar)) và bạn ghi đè == giống như bạn làm bất kỳ phương pháp khác:

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

tuyệt vời, cảm ơn. đó là đơn giản hơn nhiều so với tôi mong đợi. – lynks

+3

Bạn có cần phải ghi đè lên hàm băm và eql không? phương pháp? – Vitalij

+0

@Vitalij eql? thường chỉ là bí danh cho == và bạn cần ghi đè băm nếu bạn định sử dụng hàm băm trong bộ băm và bộ. – bluehallu

Các vấn đề liên quan