0
ただルビーで開始し、インライン編集構築物でアップ捕まってしまった:ゼロでルビーGSUB戻り値
v1="SO"
print v1.gsub!(/\W/,"").reverse
v2="SO!!"
print v2.gsub!(/\W/,"").reverse
v1.gsub!
結果。どうして? v2.gsub!
が動作します。
ただルビーで開始し、インライン編集構築物でアップ捕まってしまった:ゼロでルビーGSUB戻り値
v1="SO"
print v1.gsub!(/\W/,"").reverse
v2="SO!!"
print v2.gsub!(/\W/,"").reverse
v1.gsub!
結果。どうして? v2.gsub!
が動作します。
ここで重要な点は、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