在Ruby中覆盖==运算符

时间:2012-06-25 09:39:19

标签: ruby override equality

根据docs Array.include?使用对象上的 == 比较。我来自Java,其中(通常)使用 .equals()完成这些操作,这很容易覆盖特定对象。

如何在Ruby中覆盖 == 以允许我为特定对象指定 Array.include?的行为?

非常感谢。

2 个答案:

答案 0 :(得分:66)

在Ruby中==只是一种方法(在顶部有一些语法糖,允许你编写foo == bar而不是foo.==(bar))并覆盖==就像你一样任何其他方法:

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

答案 1 :(得分:0)

如上所述,==是Ruby的方法,可以被覆盖。您只需写下平等条件。

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

  def ==(other)
    social_id == other.social_id

您不再需要覆盖其他方法