我正在研究一些在 Ruby 中深度复制对象的技术(MRI 1.9.3)。
我遇到了以下示例,但我不确定#dup
方法实现。我测试了它并且它确实有效,但我不理解该方法的逻辑步骤,因此我在自己的代码中使用它并不舒适。
该语句@name = @name.dup
是指副本中的 iVar吗?如何?我看不到它。
有人可以解释一下吗?
另外,有没有更好的方法?
class MyClass
attr_accessor :name
def initialize(arg_str) # called on MyClass.new("string")
@name = arg_str # initialize an instance variable
end
def dup
the_copy = super # shallow copy calling Object.dup
@name = @name.dup # new copy of istance variable
return the_copy # return the copied object
end
end