間違いだらけの備忘録

このページの内容は無保証でありこのページの内容によって直接、または間接に損害を受けられたとしても私は責任を取りません。

C言語ユーザのためのRuby入門

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 の変数は全てポインタである。
破壊的メソッドは変数が指している先のオブジェクトを書換え、 それ以外のメソッドは新たにオブジェクトを生成する。

そういう物だと思ってしまえばわかりやすい

このページにはhatena以外のサービスからのコンテンツが埋め込まれています。 hatenaによりGoogle AdSense 広告が埋め込まれています。