作者janyfor (你哪位ㄚ)
看板Ruby
标题Re: [问题] 请问object.dup 和object.clone的差别
时间Tue May 29 20:16:31 2007
※ 引述《godfat (godfat 真常)》之铭言:
: ※ 引述《softwind (softwind rising)》之铭言:
: 其实我也不太能分辨 dup 和 clone 的差异,
: 之前就稍微搜寻了一下 ruby-talk 和 comp.lang.ruby
: 简单地说的话,dup 和 clone 是几乎相同的,
: 他们都是执行 shallow copy (1)(相对於 deep copy (2))
: http://en.wikipedia.org/wiki/Object_copy#Shallow_copy
: 差异只在於 clone 会 copy internal state,(你查到的那个)
看到的时候怀疑了一下
不过翻一下资料就懂了@@
Ruby 不像 Java 有 primitive type (有没有 immutable objects 我就不知道了)
都给它很 object
用了 clone 的确会新产生一个物件,而不是作 reference copy
但是,内部的 instance variables 是另一个 objects
所以 clone 完时会造成 shallow copy
去 override clone 把内部资料在作一次 clone
应该就可以防止 shallow copy 了(Java 我是这样玩 @@)
以下资料参考
http://www.rubycentral.com/ref/ref_c_object.html#clone
class Klass
attr_accessor :str
end
s1 = Klass.new -> #<Klass:0x4018d374>
s1.str = "Hello" -> "Hello"
s2 = s1.clone -> #<Klass:0x4018d2d4 @str="Hello">
s2.str[1,4] = "i" -> "i"
s1.inspect -> "#<Klass:0x4018d374 @str=\"Hi\">"
s2.inspect -> "#<Klass:0x4018d2d4 @str=\"Hi\">"
--
那我走罗。
嗯,掰掰。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.209.196.59