使用“ Hash.new {Hash.new(false)}”的原因

时间:2019-05-31 05:15:49

标签: ruby hash

遇到一些设置实例变量的代码,如下所示:

#VALUE!

是否有理由这样做?

而不是以下之一:

@square_array = Hash.new { Hash.new(false) }

1 个答案:

答案 0 :(得分:4)

是的,这是有原因的。如果使用{}定义哈希并尝试获取不存在的键的值,则会得到nil

hash = {}
#=> {}
hash[:a]
#=> nil

但是,如果您使用Hash.new进行定义,则可以为不存在的键设置定义值

hash =  Hash.new { Hash.new(false) }
#=> {}
hash[:a]
#=> {}
hash[:a][:a]
#=> false