如何使用Ruby将键和值推送到空哈希中?
我有一个dictionary类,希望能够使用“add”方法将键(作为关键字)和值(作为定义)推送到一个空哈希中。我不懂怎么用语法写。我还包括了一个RSPEC文件 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,
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")