我想要复制一个哈希表,使用相同的键但不同的值。我编写了以下代码片段,并遇到了一个意外情况:
使用
如果有人能解释为什么会发生这种情况,我将非常高兴。此外,欢迎提供更好的哈希复制方法,但我更关心的是了解为什么在这里
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]}
使用
*
运算符时,似乎并没有复制嵌套数组,而是继续引用第一个数组。如果有人能解释为什么会发生这种情况,我将非常高兴。此外,欢迎提供更好的哈希复制方法,但我更关心的是了解为什么在这里
*
不起作用。
['a']
为['d']
,而只是第一个呢?arr = [['a'], ['b'], ['c']] * 3; arr[0] = ['d']
。然后是这个:arr = [[], [], []] * 3; arr[0] = {}
? - vonconrada = "a"; b = a; b.replace("b")
会同时改变a
和b
,而a = "a"; b = a; b = "b"
不会改变它们两个的原因。 - sepp2k