我今天试图解决一个kata,它使我逐步完成了一部分练习。我遇到的问题可以简化为以下细微差别:
node = [1]
root_node = node
node << 2
p node #[1,2]
p root_node #[1,2]
node = 1
root_node = node
new_node = 3
node = new_node
p node #3
p root_node #1
为什么当我修改分配给一个变量的数组而node
和root_node
都改变而给变量赋值却又不改变另一个变量时,为什么会这样?
我会期望node = [1,2]
和root_node = [1]
。
有人可以阐明这一点,还是可以引导我浏览有关此问题的文档。我认为我从来没有注意到这种情况。谢谢。
答案 0 :(得分:1)
分配数组时,变量将保存对该数组的引用值。将其分配给另一个变量时,将复制引用。然后,当您调用<<
更改数组时,由于只有一个数组,因此在两个变量下都可见。
分配整数时,此整数的a值存储在变量中。重新分配它时,另一个值存储在此变量中。如果使用常量a = 1
或另一个变量a = b
重新分配它,则没有任何区别。
要注意的重要一点是,分配也适用于数组-引用的值已重新分配。如果您分配另一个数组,则原始数组不会更改。
node = [1]
root_node = node
new_node = [3]
node = new_node
p node
#[3]
p root_node
#[1]
另请参阅: