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

如何使用Ruby将键和值推送到空哈希中?,ruby,hash,Ruby,Hash,我有一个dictionary类,希望能够使用“add”方法将键(作为关键字)和值(作为定义)推送到一个空哈希中。我不懂怎么用语法写。我还包括了一个RSPEC文件 ruby: class Dictionary attr_accessor :keyword, :definition def entries @hash = {} end def add(options) options.map do |keyword,

我有一个dictionary类,希望能够使用“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
 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
 *Failure/Error: @d.keywords.should == ['fish']
 NoMethodError:
 undefined method `keywords' for #<Dictionary:0x007fb0c31bd458 
 @hash={"fish"=>"aquatic animal"}>*
Rspec:

 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
 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
 *Failure/Error: @d.keywords.should == ['fish']
 NoMethodError:
 undefined method `keywords' for #<Dictionary:0x007fb0c31bd458 
 @hash={"fish"=>"aquatic animal"}>*
感谢您的帮助。谢谢大家!

更新: 谢谢Dave Newton的回复。我使用了您的代码,出现以下错误:

错误:

 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
 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
 *Failure/Error: @d.keywords.should == ['fish']
 NoMethodError:
 undefined method `keywords' for #<Dictionary:0x007fb0c31bd458 
 @hash={"fish"=>"aquatic animal"}>*

字典
初始化
中实例化哈希:

class Dictionary
  def initialize
    @hash = {}
  end

  def add(defs)
    defs.each do |word, definition|
      @hash[word] = definition
    end
  end
end
现在,在调用
条目之前,您没有散列,而您没有

条目
应返回现有哈希,而不是创建新哈希

关键字
应返回散列的键

关键字
定义
不需要访问器。这样的单数项在字典类中是没有意义的。您可能需要类似于
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方法中使用_sym
,只需使用

为了给add方法提供灵活性,我可以返回self对象以继续添加

def add(key_value)
  key_value.each do |key, value|
    @hash[key] = value
  end
  self
end
所以,我现在可以这样做了

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