Ruby 散列引用

use*_*176 0 ruby hash pointers

我想要一个单一的目标,然后该目标可以在散列中修改。

target = [1,2,3]
hash = {1 => target, 2 => target}
Run Code Online (Sandbox Code Playgroud)

现在,我希望能够 a) 更改目标并让哈希自动更新或 b) 更改哈希的 1 并让它自动更改哈希的 2。两者都不起作用:

target = [6,7,8]
target
Run Code Online (Sandbox Code Playgroud)

输出:

{1=>[1, 2, 3], 2=>[1, 2, 3]}
Run Code Online (Sandbox Code Playgroud)

方案二:

hash[1] = [6,7,8]
Run Code Online (Sandbox Code Playgroud)

输出:

{1=>[6, 7, 8], 2=>[1, 2, 3]}
Run Code Online (Sandbox Code Playgroud)

所以我发现当你在 Ruby 的散列中创建一个 subhash 一个右值时,它会在将左值设置为等于它之前复制 subhash。我想要的是 Ruby 不这样做。这可能吗?

谢谢,凯文

ste*_*lag 7

target只是一个名字,[1,2,3]是它所指的对象。数组是可变的,因此您可以更改它们:

target = [1,2,3]
p hash = {1 => target, 2 => target} # =>{1=>[1, 2, 3], 2=>[1, 2, 3]}
target.replace([6,7,8])
p hash # =>{1=>[6, 7, 8], 2=>[6, 7, 8]}
Run Code Online (Sandbox Code Playgroud)