我在我正在处理的一些代码中发现了这一点,我想知道这是做什么的
h = Hash.new {|hash, key| hash[key] = 0}
=> {}
答案 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