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