0
저는 몇 시간 동안 고생했습니다.두 개체 사이의 참조 깨짐
다른 개체에 영향을주지 않고 하나를 편집 할 수 있도록 두 개체 간의 연결을 끊으려고하지만 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
해결책을 찾은 것 같습니다. 나는 그것을 곧 게시 할 것이다. 해결 방법은 to_xml로 변환 한 다음 구문 분석을 사용하여 노드 집합으로 다시 구문 분석하는 것입니다. 이 순간에 작동하는지 테스트하려고합니다. – Donato
또한 문제가 재귀가 아니기 때문에 재귀 함수에 관한 다른 질문을 삭제했습니다. 참조 된 값입니다. – Donato
'dup'이 작동하지 않는다는 것이 문제가 아닙니다. 'dup'은 외부 객체에서 작동한다는 것입니다. 그래서'NodeSet'을'dup'하는 것은 새로운'NodeSet'을 만들지 만 안에있는 노드는 같은 참조 노드입니다. 이것이 Rails와 다른 많은 인터페이스가'deep_dup' 메소드를 추가 한 이유입니다. – engineersmnky