2012-03-02 163 views
0

剛開始使用Ruby,並卡住了聯編輯構建:紅寶石GSUB返回值

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

v1.gsub!結果爲零。爲什麼? v2.gsub!工程。

回答

6

這裏的關鍵是你使用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