Re: [問題] 請問object.dup 和object.clone的差別

看板Ruby作者 (妳哪位ㄚ)時間17年前 (2007/05/29 20:16), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/3 (看更多)
※ 引述《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
文章代碼(AID): #16N1cWI5 (Ruby)
文章代碼(AID): #16N1cWI5 (Ruby)