【发布时间】:2013-04-18 01:24:19
【问题描述】:
我不确定ruby 和rubinus 的文档中“...但不是他们引用的对象” 的含义。
在ruby-doc中,有#clone和#dup行为的解释说:
产生 obj 的浅拷贝——obj 的实例变量是 复制,但不是它们引用的对象。复制冻结和 obj 的污染状态。另请参阅 Object#dup 下的讨论。
Rubinius的实现也是如此重复:
复制实例变量,但不递归复制对象 他们参考。复制污点。
我尝试了以下代码,但行为出乎我的意料。
class Klass
attr_accessor :array
end
s1 = Klass.new
ar = [1, 2, 3]
s1.array = [ar]
s2 = s1.clone
# according to the doc,
# s2.array should be initialized with empty Array
# however the array is recursivley copied too
s2.array.equal? s1.array # true
【问题讨论】: