ruby - 不同对象的实例变量都被改变

标签 ruby object instance-variables

我有一个包含数组的类。这是一个示例类。 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]

每个对象中的两个数组都会受到影响。我不知道如何让它们分开。我也尝试过使用clonedup

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

关于ruby - 不同对象的实例变量都被改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32130235/

相关文章:

java - 使用 Ruby on Rails 比较 Android Market 响应中的签名数据和签名

ruby-on-rails - 返回率 |由于 cancan 授权设计重定向循环

javascript - 如何获取用户的输入并返回我定义的匹配变量的值?

javascript - 可以使用数组作为对象的属性值吗?

javascript - VueJs 如何从 v-repeat 复制对象?

ruby-on-rails - Rails 4 app redirect_to 在发布请求后不重新加载网页

javascript - 显示一年中每一天对象详细信息的日历

Android 静态变量作用域和生命周期

ruby-on-rails - 为什么我无法直接访问 Active Record 回调中的实例变量?

objective-c - 未声明的伊瓦尔?