Ruby的替换工作如何?

时间:2011-04-06 02:33:49

标签: ruby

我正在看ruby的替换:http://www.ruby-doc.org/core/classes/String.html#M001144

对我来说似乎没有意义,你调用replace并取代整个字符串。

我在期待:

replace(old_value, new_value)

那我正在寻找gsub吗?

替换似乎与大多数其他语言不同。

3 个答案:

答案 0 :(得分:3)

我同意replace通常用作其他语言中的某种模式替换,但Ruby不同:)

是的,你在考虑gsub:

ruby-1.9.2-p136 :001 > "Hello World!".gsub("World", "Earth")
 => "Hello Earth!" 

有一点需要注意的是,String#replace似乎是无用的,但它确实消除了“污点”。你可以阅读更多关于被污染的对象here.

答案 1 :(得分:2)

我认为您认为replace没有意义的原因是因为存在分配运算符=(与gsub无关)。

重要的是String个实例是可变对象。通过使用replace,您可以更改字符串的内容,同时保留其作为对象的标识。比较:

a = 'Hello' # => 'Hello'
a.object_id # => 84793190

a.replace('World') # => 'World'
a.object_id # => 84793190

a = 'World' # => 'World'
a.object_id # => 84768100

看到replace没有改变字符串对象的id,而简单的赋值确实改变了它。这种差异会产生一些后果。例如,假设您已将一些实例变量分配给字符串实例。通过replace,该信息将被保留,但如果您将相同的变量简单地分配给不同的字符串,则所有这些信息都将消失。

答案 2 :(得分:0)

是的,它是gsub,它取自 awk 语法。我猜replace代表字符串的内部表示,因为根据文档,污点也被删除了。