我无法搞清楚这个挑战。这就是我所拥有的:
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
我正在=>> “fishaquatic动物”
我想要得到=> {'fish'=> '水生动物'}
答案 0 :(得分:2)
to_s
上的 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
答案 1 :(得分:0)
如上所述,您的代码当前正在将@x设置为新的空Hash,然后在每次调用entries
方法时将其返回。
尝试将该设置代码移动到初始化方法中:
class Dictionary
attr_reader :entries
def initialize
@entries = Hash.new
end
def add(hash)
@entries.merge!(hash)
end
end
答案 2 :(得分: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"}