2015-03-25 93 views
-1

我正在编写一个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'}?这对没有{}不是一个对象,所以我不能将它分配给一个变量或使用任何方法来操纵它。

UPDATE:

我应该有一个类字典,其具有一个实例变量@entries(初始化为空的散列)和方法Dictionary#add这将散列增加@entries

所以我做了我这样的方法。 def add(hash) @ entries.merge!哈希 结束 但显然这不是我的空哈希与我需要添加的哈希合并。

在测试中,@d是Dictionary的一个实例。

解决

对不起你们......我刚刚发现我犯了这个错误忘记当我合并使用爆炸!。感谢您的帮助!

+0

是什么测试框架?什么是“@ d”? – sawa 2015-03-25 03:57:44

+0

*没有{}的对不是一个对象*事实上,它是一个对象。在这种情况下,Ruby只是简单地让你省略大括号,但它的哈希值完全相同。你有什么问题? – 2015-03-25 04:08:10

回答

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) 

在这两种情况下,红宝石会正确地解释了最后的参数是一个Hash。

在你的情况下,@d.add('fish' => 'aquatic animal')@d.add({'fish' => 'aquatic animal'})是同义词。