看板 Ruby 關於我們 聯絡資訊
※ 引述《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