2011-12-22 72 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