断开两个对象之间的引用



我已经挣扎了好几个小时了。

我试图断开两个对象之间的链接,这样我就可以编辑其中一个而不影响另一个,但dup根本不起作用。

当我尝试dup一个Nokogiri::XML::NodeSet时,它会给我一个与原始对象具有不同object_id的对象,但当我修改副本时,会影响原始对象中的节点!Ruby中有没有办法打破这两个对象之间的联系?

def copy(collection)
  body = @doc.xpath("//w:body")
  children = @doc.xpath("//w:body").children
  body.children.map(&:remove)
  collection.each do |record|
    puts "it appears child is forever affected #{children}"
    clone = children.dup
    clone = Nokogiri::XML::NodeSet.new(@doc, clone)
    parse_nodes clone, record
    body.first << clone.to_xml
  end
end

您可以尝试创建自己的NodeSet,如

dup_node_set = Nokogiri::XML::NodeSet.new(@doc, children.to_a.map(&:dup))

不确定这是否对您来说足够深入,尽管由于您的方法是递归的,我认为它应该是递归的。

这是将children NodeSet转换为Array,然后在内部的每个element上调用dup,并将其传递给新的NodeSet

最新更新