2013-05-20 139 views
0

當我創建一個散列如下:不同的默認哈希值

creatures = { "weasels" => 0, 
    "puppies" => 6 
} 

和訪問關鍵的是不存在的散,我得到nil作爲輸出:

puts creatures["tigers"] 

但是,當我創建一個默認值的散列:

my_hash = Hash.new("hello") 

並訪問一個不存在於散列中的密鑰,我得到hello作爲結果:

puts my_hash["hey"] 

爲什麼會出現在兩種情況下不同的結果,當我定義不同的哈希?

+3

「通過給它一個默認值」 - 這就是爲什麼。你期望的結果是什麼? –

+1

「當我以不同的方式定義散列時,我會得到不同的結果嗎?」 ... 這就是爲什麼! –

回答

3

這是一個預期的行爲。按照doc

散列有訪問該 不要在哈希鍵存在時,返回的默認值。如果沒有設置默認值,則使用nil。您可以 通過發送它作爲參數傳遞給::新設置的默認值:

如果你想在散列返回nil如果該鍵不存在,那麼不通過「你好」 #new