Tag: 克隆

Rails克隆复制或复制

我有一个嵌套的表单,一旦我保存,我希望能够单击显示页面上的链接来复制或克隆该表单并打开一个新表单。 从那里我应该能够进行编辑(比如新的id)并保存为新记录。 我见过一些像deep_cloneable gem这样的例子,但我不知道如何实现它。 我认为这应该很简单,但我只是不明白把东西放在控制器和show视图中的位置。

dup和clone都返回不同的对象,但修改它们会改变原始对象

我有一个值数组,当我打印哈希值时,我将其用作订单的参考。 我想修改数组,以便数组值“更漂亮”。 我想我只是复制或克隆数组,更改值,原始对象将保持未被控制。 但是(在irb中)…… @arr = [‘stuff’, ‘things’] a = @arr.clone b = @arr.dup 所以,至少,a和@arr是不同的对象: a.object_id == @arr.object_id => false 但现在它变得奇怪了 a[0].capitalize! a => [‘Stuff’, ‘things’] @arr => [‘Stuff’, ‘things’] ## [‘Stuff’, ‘things’]## <-what??? 好的…所以修改一个会改变其他的,让我们改回来? a[0] = ‘stuff’ a => [‘stuff’, ‘things’] @arr => [‘Stuff’, ‘things’] ## <- WHAT????? 为了完整性b [1]。资本化! 具有相同的效果,将所有三个arrays的第二个位置都大写 所以…大写结束时的爆炸是否会使它变得更加强大? 足够交叉到其他对象? 我知道其他方法,但这对我来说似乎非常奇怪。 […]

如何在Ruby中创建用于深度复制/克隆对象的运算符?

我想通过引入一个新的运算符来实现以下目的(例如:= ) a := b = {} b[1] = 2 pa # => {} pb # => {1=>2} 据我所知,我需要修改Object类,但我不知道该怎么做才能得到我想要的东西。 require ‘superators’ class Object superator “:=” operand # update, must be: superator “:=” do |operand| # self = Marshal.load(Marshal.dump(operand)) # ??? end end 你能帮我这个吗? 更新 好吧,超级运动员可能不会帮助我,但我仍然想要这样的操作员。 我怎么能(或你)为Ruby创建一个扩展,我可以将其作为模块加载? require ‘deep_copy_operator’ a !?= b = {} # I […]

Ruby中数组的深层副本

我想在生产中获得一个对象并做一个精确的副本(复制其内容)到另一个相同类型的对象。 我尝试从ruby控制台以3种方式执行此操作,但它们都没有工作: 假设您将tt作为要复制的第一个对象,将tt2作为副本对象。 我尝试的第一种方法是克隆数组 tt2.patients = tt.urls.patients tt2.doctors = tt.segments.doctors tt2.hospitals = tt.pixels.hospitals 我尝试的第二种方法是复制数组,这实际上与克隆数组相同: tt2.patients = tt.patients.dup tt2.doctors = tt.doctors.dup tt2.hospitals = tt.hospitals.dup 我尝试的第三种方法是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)) 以上都不适用于从一个arrays到另一个arrays的深度复制。 在上面单独尝试每种方法之后,第一个对象( tt )的所有内容都无效(患者,医生和医院都消失了)。 您是否有任何其他想法将一个对象的内容复制到另一个对象? 谢谢。

复制Ruby字符串数组

arr = [“red”,”green”,”yellow”] arr2 = arr.clone arr2[0].replace(“blue”) puts arr.inspect puts arr2.inspect 生产: [“blue”, “green”, “yellow”] [“blue”, “green”, “yellow”] 无论如何都要做一个字符串数组的深层副本,除了使用Marshal,因为我知道这是一个黑客。 我可以: arr2 = [] arr.each do |e| arr2 << e.clone end 但它似乎并不优雅或高效。 谢谢

哪些Ruby类支持.clone?

Ruby在Object中定义了#clone 。 令我惊讶的是,有些课程在调用时会引发exception。 我发现NilClass , TrueClass , FalseClass , Fixnum都有这种行为。 1)是否存在完整的类列表(至少是核心类),不允许#clone ? 或者有没有办法检测特定类是否支持#clone ? 2) 42.clone什么问题?