不能使用数组作为Ruby Hash的默认值?

Che*_*eng 8 ruby hash

我正在向哈希键添加项目.我期待得到这样的结构:

{ 
  'a' : [1],
  'b' : [2, 3, 4]
}
Run Code Online (Sandbox Code Playgroud)

我使用Array来初始化Hash.

irb> hash = Hash.new([])
 => {} 
Run Code Online (Sandbox Code Playgroud)

然后开始使用它:

irb> hash['a'] << 1
 => [1] 
irb> hash['b'] << 2
 => [1, 2] 
Run Code Online (Sandbox Code Playgroud)

但事实证明:

irb> hash
 => {}
Run Code Online (Sandbox Code Playgroud)

Mar*_*une 11

请尝试以下方法:

hash = Hash.new{|h, k| h[k] = []}
hash['a'] << 1 # => [1]
hash['b'] << 2 # => [2]
Run Code Online (Sandbox Code Playgroud)

您获得意外结果的原因是您将空数组指定为默认值,但使用了相同的数组; 没有复制.正确的方法是使用新的空数组初始化值,就像在我的代码中一样.