Re: [問題] 請問object.dup 和object.clone的差別
※ 引述《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
討論串 (同標題文章)
Ruby 近期熱門文章
PTT數位生活區 即時熱門文章