gpt4 book ai didi

ruby - 在 Ruby 中,为什么 Array.new(size, object) 创建一个由对同一对象的多个引用组成的数组?

转载 作者:数据小太阳 更新时间:2023-10-29 07:11:48 24 4
gpt4 key购买 nike

this answer 中所述, Array.new(size, object) 创建一个数组,其中 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"}]

为什么 Ruby 会这样做,而不是对 object 进行 dupclone

最佳答案

因为那是the documentation说是的。注意 Hash.new 只被调用一次,所以当然只有一个 Hash

如果要为数组中的每个元素创建一个新对象,请将一个 block 传递给 Array.new 方法,然后将为每个新元素调用该 block :

>> a = Array.new(2) { Hash.new }
=> [{}, {}]
>> a[0]['cat'] = 'feline'
=> "feline"
>> a
=> [{"cat"=>"feline"}, {}]
>> a[1]['cat'] = 'Felix'
=> "Felix"
>> a
=> [{"cat"=>"feline"}, {"cat"=>"Felix"}]

关于ruby - 在 Ruby 中,为什么 Array.new(size, object) 创建一个由对同一对象的多个引用组成的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4642395/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com