gpt4 book ai didi

ruby-on-rails - 如何在 Ruby 中创建对象的深拷贝?

转载 作者:数据小太阳 更新时间:2023-10-29 06:21:14 26 4
gpt4 key购买 nike

我做了一些搜索,发现了一些关于创建深复制运算符的不同方法和帖子。

在 Ruby 中是否有快速简单(内置)的深度复制对象的方法?这些字段不是数组或散列。

使用 Ruby 1.9.2。

最佳答案

普通 Ruby 中并未内置深拷贝,但您可以通过编码和解码对象来破解它:

Marshal.load(Marshal.dump(@object))

但这并不完美,并且不适用于所有对象。更稳健的方法:

class Object
def deep_clone
return @deep_cloning_obj if @deep_cloning
@deep_cloning_obj = clone
@deep_cloning_obj.instance_variables.each do |var|
val = @deep_cloning_obj.instance_variable_get(var)
begin
@deep_cloning = true
val = val.deep_clone
rescue TypeError
next
ensure
@deep_cloning = false
end
@deep_cloning_obj.instance_variable_set(var, val)
end
deep_cloning_obj = @deep_cloning_obj
@deep_cloning_obj = nil
deep_cloning_obj
end
end

来源:

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/43424

关于ruby-on-rails - 如何在 Ruby 中创建对象的深拷贝?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8206523/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com