class PassByValueScopeConfusion
def does_not_modify(s)
s = "DIFFERENT"
end
def does_modify(s)
s.upcase!
end
end
obj = PassByValueScopeConfusion.new
some_string = "abcdefg"
# does not change the value of some_string
obj.does_not_modify(some_string)
# changes the value of some_string
obj.does_modify(some_string)
渡された文字列で破壊的なメソッドを呼び出すメソッドに文字列を渡していますが、どういうわけか、元の変数「some_string」が変更されています。破壊的なメソッドを使用してスコープ外の「some_string」変数を変更できる場合、代入演算子を使用してそれを行う方法はありますか (replace メソッドを呼び出す以外に)?
編集代入演算子で許可されていない場合、Rubyは破壊演算子でスコープ外の変数を変更できるのはなぜですか?