GSUB!正在修改未指定的字符串

时间:2010-06-06 01:08:40

标签: ruby

我正在从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!(/\&lt;!-- more --\&gt;/, "----------Read More----------")

问题是我执行gsub之后!在theBody上,origFile也有修改。我不明白为什么会这样或如何解决它。我非常感谢你的帮助。

2 个答案:

答案 0 :(得分:2)

就是这样:

theBody = array[6][0].to_s.dup

如果没有.dup,则两个变量都引用相同的字符串。有了它,theBody就可以获得一份单独的副本。

答案 1 :(得分:1)

您正在修改字符串,这意味着您还要修改对该字符串的任何其他引用。如果您只想修改theBody,请使用dup复制字符串并创建一个新实例:

theBody = array[6][0].to_s.dup
theBody.gsub!(/\&lt;!-- more --\&gt;/, "----------Read More----------")

您也可以使用gsub(不含!):

theBody = array[6][0].to_s
theBody = theBody.gsub(/\&lt;!-- more --\&gt;/, "----------Read More----------")

我建议这样做:

theBody = array[6][0].to_s.
  gsub(/\&lt;!-- more --\&gt;/, "----------Read More----------")