红宝石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