遇到一些设置实例变量的代码,如下所示:
#VALUE!
是否有理由这样做?
而不是以下之一:
@square_array = Hash.new { Hash.new(false) }
答案 0 :(得分:4)
是的,这是有原因的。如果使用{}
定义哈希并尝试获取不存在的键的值,则会得到nil
hash = {}
#=> {}
hash[:a]
#=> nil
但是,如果您使用Hash.new
进行定义,则可以为不存在的键设置定义值
hash = Hash.new { Hash.new(false) }
#=> {}
hash[:a]
#=> {}
hash[:a][:a]
#=> false