我正在开发一种方法,允许我将“word”及其“定义”添加到哈希中。
这就是我所拥有的:
class Dictionary
def entries
@entries ||= {}
end
def add word, definition = nil
entries[word] = definition
"#{entries}"
end
end
注意:我希望definition参数是可选的,因此我的初始化为nil。但是,由于某种原因,我的输出中出现了这种情况。
示例:传入“鱼”和“水生动物”:
我的输出: {{"fish"=>"aquatic animal"}=>nil}
期望的输出: {"fish"=>"aquatic animal"}
似乎问题在于它将我传递给方法的两个值放入哈希中的第一个键,并将该“nil”值放入该键的值中。我在哪里犯错?
编辑:添加正在进行方法调用的相关RSpec块,以便我可以更好地理解RSpec如何进行此调用:
describe Dictionary do
before do
@d = Dictionary.new
end
it 'is empty when created' do
@d.entries.should == {}
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
谢谢!
答案 0 :(得分:1)
你不想做
@d.add('fish' => 'aquatic animal')
你想做...
@d.add('fish', 'aquatic animal')
实际上,你将散列作为第一个参数传递,第二个参数为空。
答案 1 :(得分:1)
您的RSpec错误。
将@d.add('fish' => 'aquatic animal')
更改为@d.add('fish', 'aquatic animal')
您的#add
方法接受2个参数,其中一个是可选的。使用您当前的代码,您将传入一个哈希'fish' => 'aquatic animal'
。因此,将word
设置为哈希值,并将其设置为nil
。
答案 2 :(得分:1)
如果您想选择接受哈希条目......
def add word, definition = nil
if word.class == Hash
entries.merge!(word)
else
entries[word] = definition
end
"#{entries}"
end