2013-05-20 97 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