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

看板Ruby作者 (godfat 真常)時間17年前 (2007/05/26 12:36), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/3 (看更多)
※ 引述《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,(你查到的那個) 而 internal state 包含 frozen state 和 tainted state, 前者是 obj.freeze 會造成的,後者跟安全性有關, 你可以再查查,這邊就不詳細說明這兩者了。 也就是說,Ruby 沒有預設的 deep copy, 可以用 facets http://facets.rubyforge.org/ 擴充了 deep_copy 和 deep_clone 這兩個 method (1) shallow copy 簡單地說就是僅複製 instance 的 reference e.g., a = Array.new(2, Array.new) assert a[0].object_id == a[1].object_id (2) deep copy 簡單地說就是連 instance 中的 instance 也要複製 e.g., 同上例的結果會是 false -- Hear me exalted spirits. Hear me, be you gods or devils, ye who hold dominion here: I am a wizard without a home. I am a wonderer seeking refuge. Sacrifice -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.28.18
文章代碼(AID): #16LxbKtH (Ruby)
文章代碼(AID): #16LxbKtH (Ruby)