【发布时间】:2015-01-09 21:16:20
【问题描述】:
我正在尝试深度复制一个包含 3D 数组的对象。但它没有按预期工作。
class A
def initialize
@a = [[[1]], [[2]]]
end
def modify3D
@a[0][0] = @a[1][0]
end
def modify2D
@a[0] = @a[1]
end
def dup
copy = super
copy.make_independent!
copy
end
def make_independent!
@a = @a.dup
end
def show
print "\n#{@a}"
end
end
a = A.new
b = a.dup
#a.modify2D
b.show
a.modify3D
b.show
在这种情况下,b 被 a 上的 modify3D 调用更改。
[[[1]], [[2]]]
[[[2]], [[2]]]
如果我取消注释 modify2D 行一切正常。
[[[1]], [[2]]]
[[[1]], [[2]]]
有人能解释一下这里发生了什么吗?
【问题讨论】: