http://jijixi.azito.com/gotow/widestudio/ruby_with_widestudio/1st_step_ruby_for_C_users.html
Ruby 初心者に対して説明するときに、どうにも困ってしまう問題というのがあるようです。
例を上げてみましょう。
a = "foo"
b = a
c = b << "bar"ここで、"<<" は文字列を追加するメソッドです。
さて、ここまで処理した状態で、変数 a,b,c の中身はどうなっているでしょう?
正解はこうです。
a => "foobar"
b => "foobar"
c => "foobar"あなたの答えは当たっていましたか?
別の例を見てみましょう。
a = "foo"
b = a
c = b + "bar"ここでの "+" は文字列を結合するメソッドです。
さて、今回は変数 a,b,c はどうなっているでしょうか?
正解は……
a => "foo"
b => "foo"
c => "foobar"こうです。当たっていましたか?
スクリプト言語とは思えん挙動だ...
とおもったが別にスクリプト言語と値渡しは関係ないか...
結局のところ、Ruby で訳の分からない現象に悩まされないために、 まず憶えるべき点は 2 つです。
Ruby の変数は全てポインタである。
破壊的メソッドは変数が指している先のオブジェクトを書換え、 それ以外のメソッドは新たにオブジェクトを生成する。
そういう物だと思ってしまえばわかりやすい