Ruby:将类的实例相互比较

时间:2017-09-30 19:08:19

标签: ruby comparison-operators

我有一个测试,它依赖于将同一个类的实例相互比较。

d022 = SimpleDate.new(2016, 1, 1)
d023 = SimpleDate.new(2016, 1, 1)
d024 = SimpleDate.new(2016, 1, 2)

assert(d022 == d022)
assert(d022 == d023)
refute(d024 == d022)

我的类函数能够传递前两个测试但不能传递最后一个测试。我的代码中我做错了什么?

class SimpleDate
  attr_reader :year, :month, :day

  def initialize(year, month, day) 
    @year = year
    @month = month
    @day = day
  end

  def ==(val)
    @year == @year && @month == @month && @day == @day
  end

  def !=(val)
    @year != @year || @month !=@month || @day != @day
  end
end

2 个答案:

答案 0 :(得分:2)

  

我的代码中出错了什么?

您需要将值与自己进行比较。这看起来不可疑吗?

  def ==(val)
    @year == @year && @month == @month && @day == @day
  end

提示:您未在此处以任何方式使用val

答案 1 :(得分:1)

您应该将当前对象的属性与传入

中的val的属性进行比较
class SimpleDate
  attr_reader :year, :month, :day

  def initialize(year, month, day) 
    @year = year
    @month = month
    @day = day
  end

  def ==(val)
    @year == val.year && @month == val.month && @day == val.day
  end

  def !=(val)
    @year != val.year || @month != val.month || @day != val.day
  end
end