添加哈希条目

时间:2015-03-25 03:54:29

标签: ruby

我正在研究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 !。谢谢你的帮助!

1 个答案:

答案 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'})是同义词。