According to the docs, Array.include? uses the == comparison on objects. I come from Java where such things are (usually) done with .equals() which is easy to override for a particular object.
How can I override == in Ruby to allow me to specify the behaviour of Array.include? for my particular object?
Ruby permits operator overloading, allowing one to define how an operator shall be used in a particular program. For example a '+' operator can be define in such a way to perform subtraction instead addition and vice versa.
Triple Equals Operator (More Than Equality) Our last operator today is going to be about the triple equals operator ( === ). This one is also a method, and it appears even in places where you wouldn't expect it to. Ruby is calling the === method here on the class.
You cannot override operators in Java. That's one of the reasons why any nontrival math (especially geometric) operations should not be implemented in Java (the Point class above is kind of such a class, if you want it to do some real work, for example a line-line intersection, you'd better do it in C++).
In Ruby == is just a method (with some syntax sugar on top allowing you to write foo == bar instead of foo.==(bar)) and you override == just like you would any other method:
class MyClass   def ==(other_object)     # return true if self is equal to other_object, false otherwise   end end 
                        As described above, == is a method in Ruby and can be overridden.  You code a custom equality condition in the method. For example:
class Person   attr_reader :name, :gender, :social_id   attr_accessor :age    def initialize(name, age, gender, social_id)     self.name = name     self.age = age.to_i     self.gender = gender     self.social_id = social_id   end    def ==(other)     social_id == other.social_id   end end  You don't need to override other methods any more.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With