2017-09-30 5 views
0

私は、同じクラスのインスタンスをお互いに比較するテストに頼っています。Ruby:クラスのインスタンスをお互いに比較する

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) 

私のクラス関数は、最初の2つのテストに合格できますが、最後のテストでは合格できません。私のコードで何が間違っていますか?

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 [email protected] || @day != @day 
    end 
end 
+1

に渡されたvalの属性と現在のオブジェクトの属性を比較する必要があり、等しくないが([ 'BasicObject#!=']によって提供されhttp://ruby-doc.org/core-2.4.2/BasicObject.html#method-i-21-3D)。 – Stefan

+0

[Comparable](https://ruby-doc.org/core-2.4.2/Comparable.html)をインクルードし、<=>メソッド – steenslag

答えて

2

私は私のコードで間違って何をしているのですか?

自分で値を比較しています。これはあなたに疑わしいと思わない?

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

ヒント:valはここでは何も使用していません。

+0

yesを定義してください。私はまだ問題を抱えており、再び投稿します。 –

1

あなたはちょうど `==`実装する必要が

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 
+0

iGbanamありがとうございます。私はまだ問題を抱えており、再び投稿します。 –

+0

<=>を使用して処理するにはどうすればよいですか?以下は動作しません:def <=>(val) @year <=> val.year &&(at)month <=> val.month &&(at)day <=> val.day end –

関連する問題