红宝石GSUB返回值

问题描述:

刚开始使用Ruby,并卡住了联编辑构建:红宝石GSUB返回值

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

v1.gsub!结果为零。为什么? v2.gsub!工程。

这里的关键是你使用gsub,gsub!的变异版本,它修改了它被调用的实际字符串。至于什么它返回,the documentation它最好说:

执行的String#gsub换人到位,返回str,或者nil如果进行没有换人。

您应该使用非变异版本,gsub,如果不实际希望修改字符串它呼吁:

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

或者你可以打印之前做替代变量:

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

或者,在Ruby 1.9的,你可以使用tap

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