我正在研究ruby教程并遇到过这个问题。我需要编写一个方法来传递这个测试。
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
如果您通过'fish' => 'aquatic animal'
而不是{'fish' => 'aquatic animal'}
,如何向哈希添加键值对?没有{}
的对不是对象,所以我不能将它分配给变量或使用任何方法来操作它。
更新
我应该有一个类Dictionary,它有一个实例变量@entries
(初始化为空哈希),以及一个方法Dictionary#add
,它会将哈希值添加到@entries
。< / p>
所以我做了这样的方法。 def add(哈希) @ entries.merge!哈希 结束 但显然这并没有将我的空哈希与我需要添加的哈希合并。
在测试中,@d
是Dictionary的实例。
解决
对不起伙计......我刚刚发现我犯了这个错误,在合并时忘了使用bang !
。谢谢你的帮助!
答案 0 :(得分:1)
在Ruby中,花括号对于作为传递给方法的最后一个参数传递的哈希是可选的。引用the documentation:
哈希也常用作在函数中使用命名参数的方法...如果哈希是方法调用的最后一个参数,则不需要大括号
也就是说,如果您有方法:
def foo(name, hash)
puts "The keys in this hash are #{hash.keys.inspect}"
end
您可以将其调用为:
foo("test", {"a" => 1, "b" => 2})
或者作为:
foo("test", "a" => 1, "b" => 2)
在这两种情况下,Ruby都会正确地将最终参数解释为Hash。
在您的情况下,@d.add('fish' => 'aquatic animal')
和@d.add({'fish' => 'aquatic animal'})
是同义词。