如this answer中所述,Array.new(size, object)
创建了一个数组,size
引用了相同的object
。在Ruby中,为什么Array.new(size,object)创建一个包含对同一对象的多个引用的数组?
hash = Hash.new
a = Array.new(2, hash)
a[0]['cat'] = 'feline'
a # => [{"cat"=>"feline"},{"cat"=>"feline"}]
a[1]['cat'] = 'Felix'
a # => [{"cat"=>"Felix"},{"cat"=>"Felix"}]
为什么红宝石做到这一点,而不是做一个dup
或object
clone
?
“因为这就是文档所说的。” - 我希望能够将这个原因推进一点。 – 2011-01-09 23:58:31
弹出原因堆栈:因为当您传入要用于预填充数组的对象时,该数组将被预填充该对象。 – yfeldblum 2011-01-10 00:53:50