Rubyのローカル変数とインスタンス変数には次の違いがあります。
ローカル変数の挙動
例えば次のようなクラスがあったとします。
class Local def method_1 number = 100 end def method_2 number end end
実行結果は次の通りです。
>object = Local.new >object.method_1 => 100 >object.method_2 NameError: undefined local variable or method `number' for #<Local:0x007f823813fc88>
method_1で定義した変数numberがmethod_2でも使えれば100と表示されるはずですが、エラーとなってしまいました。このようにローカル変数は定義したメソッド内でしか使えません。
インスタンス変数の挙動
では、インスタンス変数ではどうでしょうか。インスタンス変数は変数名の先頭に@がつきます。
class Local def method_1 @number = 100 end def method_2 @number end end
実行結果は次の通りです。
>object = Local.new >object.method_1 => 100 >object.method_2 => 100
今度はmethod_2を実行した際に、きちんと100が帰ってきていますね。method_1とmethod_2が同じ@numberという変数を利用できています。
これがインスタンス変数の特徴です。