2011-12-22 104 views
11

我想要在生產上獲得一個對象,然後將一個確切的副本(複製其內容)複製到另一個相同類型的對象。Ruby中數組的深層副本

  1. 比方說,你有tt只要你想爲複製對象過去,tt2複製的第一個對象:我試圖從Ruby控制檯3種方式其中沒有他們的努力這樣做。我嘗試的第一個方法是克隆陣列

    tt2.patients = tt.urls.patients 
    tt2.doctors = tt.segments.doctors 
    tt2.hospitals = tt.pixels.hospitals 
    
  2. 第二種方法我試圖被複制陣列這實際上是相同的克隆陣列:

    tt2.patients = tt.patients.dup 
    tt2.doctors = tt.doctors.dup 
    tt2.hospitals = tt.hospitals.dup 
    
  3. 第三種方法我試圖被marhsalling。

    tt2.patients = Marshal.load(Marshal.dump(tt.patients)) 
    tt2.doctors = Marshal.load(Marshal.dump(tt.doctors)) 
    tt2.hospitals = Marshal.load(Marshal.dump(tt.hospitals)) 
    

無上述作品深度複製從一個陣列到另一個。在單獨嘗試每種方法之後,第一個對象(tt)的所有內容都將被取消(患者,醫生和醫院不在)。你有任何其他想法複製一個對象的內容到另一個?謝謝。

+1

你只是在第一個例子中設置你的變量。請改用tt2.patients = tt.patiens.clone。 – three 2011-12-22 18:44:14

回答

15

輕鬆!

@new_tt   = tt2.clone 
@new_tt.patients = tt2.patients.dup 
@new_tt.doctors = tt2.doctors.dup 
@new_tt.hospitals = tt2.hospitals.dup 
@new_tt.save 
+0

這很好。 new_tt擁有我現在需要的所有信息。然而,tt2(患者,醫生,醫院)的所有內容在完成你上面告訴我的內容之後就消失了。你如何保留tt2的內容? – 2011-12-22 19:11:10

+0

Woops!那裏有一個語法錯誤。我更新了上面的代碼。試試看。 – Trip 2011-12-23 19:14:36

+0

這和他的第二種方法有什麼不同? – 2016-08-30 12:56:19