我正在从XML文件中提取一些信息,我想对数据执行一些修改,同时在变量“origFile”中保留原始文件的副本。这就是我所拥有的:
require "rexml/document"
include REXML
doc = Document.new File.new(thePath)
root = doc.root
array = []
root.elements.each("dict/string") {|element| array << element}
origFile = []
root.elements.each("dict"){|i| origFile << i}
theBody = array[6][0].to_s
theBody.gsub!(/\<!-- more --\>/, "----------Read More----------")
问题是我执行gsub之后!在theBody上,origFile也有修改。我不明白为什么会这样或如何解决它。我非常感谢你的帮助。
答案 0 :(得分:2)
就是这样:
theBody = array[6][0].to_s.dup
如果没有.dup
,则两个变量都引用相同的字符串。有了它,theBody就可以获得一份单独的副本。
答案 1 :(得分:1)
您正在修改字符串,这意味着您还要修改对该字符串的任何其他引用。如果您只想修改theBody
,请使用dup
复制字符串并创建一个新实例:
theBody = array[6][0].to_s.dup
theBody.gsub!(/\<!-- more --\>/, "----------Read More----------")
您也可以使用gsub
(不含!
):
theBody = array[6][0].to_s
theBody = theBody.gsub(/\<!-- more --\>/, "----------Read More----------")
我建议这样做:
theBody = array[6][0].to_s.
gsub(/\<!-- more --\>/, "----------Read More----------")