2012-03-02 9 views
0

ただルビーで開始し、インライン編集構築物でアップ捕まってしまった:ゼロでルビーGSUB戻り値

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

v1.gsub!結果。どうして? v2.gsub!が動作します。

答えて

6

ここで重要な点は、gsub,gsub!という突然変異バージョンを使用していることです。これは、実際に呼び出された文字列を変更します。それは返す何のためとして、the documentation最高のそれを言う:

は何の置換が行われなかった場合str、またはnilを返し、場所にString#gsubの置換を行います。

あなたが実際に文字列を変更したくない、それが呼び出された場合あなたは、非変異バージョン、gsubを使用する必要があり、次のいずれか

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

それとも、印刷する前に、置換を行うことができます変数:

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

あるいは、Ruby 1.9の中で、あなたが使用することができtap

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