如何将键和值推送到Ruby的空哈希中?

我有一个字典类,希望能够使用’add’方法将键(作为关键字)和值(作为定义)推送到空哈希中。 我不明白如何在语法上写这个。 我也包含了一个RSPEC文件。

ruby:

class Dictionary attr_accessor :keyword, :definition def entries @hash = {} end def add(options) options.map do |keyword, definition| @hash[keyword.to_sym] = definition end end end 

Rspec的:

  require 'dictionary' 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'} @d.keywords.should == ['fish'] end 

任何帮助表示赞赏。 谢谢!

更新:谢谢Dave Newton的回复。 我用你的代码得到了这个错误:

错误:

  *Failure/Error: @d.keywords.should == ['fish'] NoMethodError: undefined method `keywords' for #"aquatic animal"}>* 

当我使用@hash [word.to_sym] = defintion将’word’转换为符号时,我得到了一个不同的错误

  *Failure/Error: @d.entries.should == {'fish' => 'aquatic animal'} expected: {"fish"=>"aquatic animal"} got: {:fish=>"aquatic animal"} (using ==) Diff: @@ -1,2 +1,2 @@ -"fish" => "aquatic animal" +:fish => "aquatic animal"* 

Dictionaryinitialize实例化你的哈希:

 class Dictionary def initialize @hash = {} end def add(defs) defs.each do |word, definition| @hash[word] = definition end end end 

现在你没有哈希,直到你调用entries ,你没有。

entries返回 现有哈希值,而不是创建新哈希值。

keywords应该返回哈希的键。

您不需要keyworddefinition 。 这些单数项在字典类中是没有意义的。 您可能需要返回定义的lookup(word)的内容。

此外,您将单词转换为符号,但我不知道为什么 – 特别是因为您在规范中使用字符串键。 选择一个,虽然我不相信这是符号增加价值的情况。

请仔细考虑变量命名,以提供尽可能多的上下文。

看看你的Rspec,看起来你需要这个设置。

 class Dictionary def initialize @hash = {} end def add(key_value) key_value.each do |key, value| @hash[key] = value end end def entries @hash end def keywords @hash.keys end end 

不要在add方法中使用key.to_sym ,只需key

为了灵活地添加方法,我可以返回self对象继续添加。

 def add(key_value) key_value.each do |key, value| @hash[key] = value end self end 

所以,我现在可以这样做。

 @d.add("a" => "apple").add("b" => "bat")