42

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?

ggorlen
  • 33,459
  • 6
  • 59
  • 67
lynks
  • 5,453
  • 6
  • 22
  • 42

2 Answers2

77

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
sepp2k
  • 353,842
  • 52
  • 662
  • 667
1

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.

ggorlen
  • 33,459
  • 6
  • 59
  • 67
Eric Andrews
  • 709
  • 7
  • 9