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 不这样做。这可能吗?
谢谢,凯文
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)