ruby哈希设置

时间:2011-03-04 21:33:17

标签: ruby-on-rails ruby

我在我正在处理的一些代码中发现了这一点,我想知道这是做什么的

h = Hash.new {|hash, key| hash[key] = 0}
 => {} 

3 个答案:

答案 0 :(得分:7)

当一个块传递给Hash.new时,每次访问一个不存在的密钥时都会调用该块。例如:

h = Hash.new { |hash, key| hash[key] = "Default" }
h[:defined_key] = "Example"    

puts h[:defined_key] # => "Example"
puts h[:undefined_key] # => "Default"

有关详细信息,请参阅http://ruby-doc.org/core/classes/Hash.html#M000718

答案 1 :(得分:2)

http://ruby-doc.org/core/classes/Hash.html#M000718

此块定义访问不存在的密钥时哈希的作用。因此,如果键没有值,则将值设置为0,然后返回0作为值。

这不仅对默认值有好处 - 例如,你可以让它抛出没有这样的键的例外。事实上,如果你只想要一个默认值,你可以说:

Hash.new "defaultValue"

答案 2 :(得分:0)

它使任何新键的默认值等于零而不是nil,观察测试in和irb控制台会话:

$ irb
>> normal_hash = Hash.new
=> {}
>> normal_hash[:new_key]
=> nil
>> h = Hash.new {|hash, key| hash[key] = 0}
=> {}
>> h[:new_key]
=> 0