0

私はこの課題を理解するのに苦労しています。これが私が持っているものです:

class Dictionary
attr_accessor :entries

def initialize
    @x = Hash.new
end

def entries
    @x
end

def add(hash)
    @x.merge!(hash)
end

end

@d=Dictionary.new
@d.add('fish' => 'aquatic animal')
puts @d.entries

私は=>「水生動物」を取得しています

入手したい=>{'魚'=>'水生動物'}

4

3 に答える 3

0

書かれているように、コードは現在 @x を新しい空のハッシュに設定し、メソッドを呼び出すたびにそれを返しますentries

そのセットアップ コードを初期化メソッドに移動してみてください。

class Dictionary
    attr_reader :entries

    def initialize
        @entries = Hash.new
    end

    def add(hash)
        @entries.merge!(hash) 
    end
end
于 2013-02-13T00:41:36.210 に答える
0

rspecコードが少し奇妙に思えます。2 番目のテストでは、entries メソッドが実行され、entries メソッドはインスタンス変数 @x を空白にリセットします。そのため、インスタンス変数を attr_reader として追加し、新しい辞書オブジェクトを作成するときに初期化することをお勧めします。したがって、次のようになります

class Dictionary
    attr_reader @x

    def initialize
      @x = Hash.new
    end

    def add(hash)
      @x.merge!(hash) 
    end
end

テストは次のようになります

@d.add(fish: "aquatic animal")
@d.x.should == {'fish' => "aquatic animal"}
于 2013-02-13T01:10:50.607 に答える