哈希默认值未被使用

gaq*_*qzi 2 ruby hash default-value

今天我尝试了以下代码片段,我不明白为什么我们之间会得到不同的结果.据我所知,他们是一样的.

一个使用默认值off Hash,另一个代码段在访问之前为密钥创建一个空数组.

任何了解发生了什么的人?:)

# Hash default if the key doesn't have a value set is an empty Array
a = Hash.new([])
a[:key] << 2 # => [2]
p a # => {} nil
p a[:key] # => [2]
p a.keys # => []
p a.values # => []

# Explicitly add an array for all nodes before creating
b = Hash.new
b[:key] ||= []
b[:key] << 2 # => [2]
p b # => {:key=>[2]}
p b.keys # => [:key]
Run Code Online (Sandbox Code Playgroud)

Ruby版本1.8.7

mač*_*ček 5

也许这会有所帮助:

a = Hash.new { |hash, key| hash[key] = [] }
a[:key] << 2 # => [2]
a[:key]      # => [2]
p a          # => {:key=>[2]}
Run Code Online (Sandbox Code Playgroud)