Ruby gsub返回值

时间:2012-03-02 20:55:38

标签: ruby

刚开始使用Ruby,并且开始使用内联编辑结构:

v1="SO"
print v1.gsub!(/\W/,"").reverse
v2="SO!!"
print v2.gsub!(/\W/,"").reverse

v1.gsub!结果为零。为什么? v2.gsub!有效。

1 个答案:

答案 0 :(得分:7)

这里的关键是你正在使用gsubgsub!的变异版本,它会修改它所调用的实际字符串。至于它返回的内容,the documentation说得最好:

  

执行String#gsub的替换,如果没有执行替换,则返回strnil

如果您实际上不希望修改调用它的字符串,则应使用非变异版本gsub

print v2.gsub(/\W/, "").reverse

或者您可以在打印变量之前进行替换:

v2.gsub!(/\W/, "")
print v2.reverse

或者,在Ruby 1.9中,您可以使用tap

print v1.tap { |v1| v1.gsub!(/\W/, "") }.reverse