【发布时间】:2020-05-11 05:26:56
【问题描述】:
当我在 Ruby 中运行这段代码时:
outerarr = []
innerarr = [1]
outerarr.push(innerarr)
innerarr[0] += 1
那么outerarr 将是[[2]]。
我明白为什么会发生这种情况,但是有没有办法“断开”innerarr,可以这么说,以便在更新 innerarr 时,outerarr 不会改变(即保持为 [[1]])?
谢谢。
【问题讨论】:
-
数组是第一类对象。当一个数组(对象)引用另一个数组(对象),并且当引用改变状态时,它会被反映。这是面向对象编程的非常基本的规则。
-
你想保持
innerarr可以改变只是outerarr不应该改变吗?或者你想确保innerarr一旦被推入outerarr就不能再更改?运行innerarr[0] += 1后innerarr和outerarr的预期输出是多少?