我正在看ruby的替换:http://www.ruby-doc.org/core/classes/String.html#M001144
对我来说似乎没有意义,你调用replace并取代整个字符串。
我在期待:
replace(old_value, new_value)
那我正在寻找gsub吗?
替换似乎与大多数其他语言不同。
答案 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
代表字符串的内部表示,因为根据文档,污点也被删除了。