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

我得到了=>“鱼水生动物”

我想要得到 => {'fish' => 'aquatic animal'}

4

3 回答 3

2

to_s对于某些 Ruby 版本, on 的Hash行为不太理想。试试puts @d.entries.inspect

更新:

以下代码适用于我(Ruby 1.9.3 和 rspec 2.12.0):

class Dictionary      
  def initialize
    @x = Hash.new
  end

  def entries
    @x
  end

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

describe Dictionary do
  before do
    @d = Dictionary.new
  end

  it 'can add whole entries with keyword and definition' do
    @d.add('fish' => 'aquatic animal')
    @d.entries.should == {'fish' => 'aquatic animal'}
  end
end
于 2013-02-13T01:44:42.743 回答
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 代码有点奇怪。第二个测试执行 entry 方法,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 回答