2015-03-25 125 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'})是同義詞。