gpt4 book ai didi

ruby - 为什么 Array * 在 Ruby 中引用而不是复制值?

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

我想使用相同的键但不同的值来复制哈希。我编写了以下代码片段,遇到了一些我没想到的事情:

hsh = {:foo => 'foo', :bar => 'bar'}

hsh_copy = Hash[hsh.keys.zip([[]] * hsh.length)] # => {:foo=>[], :bar=>[]}
hsh_copy[:foo] << 1
hsh_copy[:bar] << 2

hsh_copy # => {:foo=>[1, 2], :bar=>[1, 2]}

似乎在使用* 运算符时并没有复制嵌套数组,而是继续引用第一个数组。

如果有人能解释为什么会发生这种情况,我将非常高兴。此外,复制哈希的更好方法将不胜感激,但我更关心的是理解为什么 * 在这里没有按预期工作。

最佳答案

如果 Array#* 复制了数组的元素,当它用于具有不可复制元素(其中包括数字)的数组时会中断,这是不可取的。

至于怎么做你想做的:将hsh.keys.zip([[]] * hsh.length)替换为hsh.map {|k,v| [k, []] }.

关于ruby - 为什么 Array * 在 Ruby 中引用而不是复制值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4485926/

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