不同对象的实例变量都在改变
Instance variables of different objects are both being changed
我有一个包含数组的 class。这是一个示例 class。 a
是一个数组
class Holder
attr_accessor :a
end
我正在尝试复制一个对象并在其数组上执行一个函数。示例情况:
t = Holder.new
t.a = (1..9).to_a
t2= Holder.new
t2.a = t.a
t2.a[2]+=10
t2.a
# => [1, 2, 13, 4, 5, 6, 7, 8, 9]
t.a
# => [1, 2, 13, 4, 5, 6, 7, 8, 9]
每个对象中的两个数组都受到影响。我不知道如何将它们分开。我也尝试过 clone
和 dup
。
dupt = t2.dup
dupt.a[8]+=10
dupt
# => #<Holder:0x007fb6e193b0a8 @a=[1, 2, 13, 4, 5, 6, 7, 8, 19]>
t2
# => #<Holder:0x007fb6e1962ba8 @a=[1, 2, 13, 4, 5, 6, 7, 8, 19]>
您需要在 Array
上调用 dup
, 而不是 在您的 Holder
对象上。 dup
不会创建您要复制的对象中所有子元素的副本。
t2.a = t.a.dup
我有一个包含数组的 class。这是一个示例 class。 a
是一个数组
class Holder
attr_accessor :a
end
我正在尝试复制一个对象并在其数组上执行一个函数。示例情况:
t = Holder.new
t.a = (1..9).to_a
t2= Holder.new
t2.a = t.a
t2.a[2]+=10
t2.a
# => [1, 2, 13, 4, 5, 6, 7, 8, 9]
t.a
# => [1, 2, 13, 4, 5, 6, 7, 8, 9]
每个对象中的两个数组都受到影响。我不知道如何将它们分开。我也尝试过 clone
和 dup
。
dupt = t2.dup
dupt.a[8]+=10
dupt
# => #<Holder:0x007fb6e193b0a8 @a=[1, 2, 13, 4, 5, 6, 7, 8, 19]>
t2
# => #<Holder:0x007fb6e1962ba8 @a=[1, 2, 13, 4, 5, 6, 7, 8, 19]>
您需要在 Array
上调用 dup
, 而不是 在您的 Holder
对象上。 dup
不会创建您要复制的对象中所有子元素的副本。
t2.a = t.a.dup