Rubyの変数について学ぶ
ローカル変数スコープ(クラス、モジュール、メソッド定義の本体)における小文字で始まる識別子への最初の代入はそのスコープに属するローカル変数の宣言になります。宣言されていない識別子の参照は引数の無いメソッド呼び出しとみなされます。
メソッド内で定義した変数は、メソッドの外から見えない
`@'で始まる変数はインスタンス変数であり、特定のオブジェクトに所属しています。インスタンス変数はそのクラスまたはサブクラスのメソッドから参照できます。初期化されていないインスタンス変数を参照した時の値はnilです。
インスタンス (オブジェクト) が持つ変数のことで、変数名の先頭に@をつける
インスタンス変数の値を読み書きするためのメソッドを、「アクセサ (accessor)」と呼ぶ
アクセサメソッドの名前は、慣習的にインスタンス変数の名前 (@なし) とする
instance_variablesメソッドを使うと、インスタンス変数の一覧を取得できる
インスタンス変数は代入したときに作られる
インスタンス変数の寿命はオブジェクトの寿命と同じになる
クラス定義の直下やクラスメソッド内で定義したインスタンス変数を、「クラスインスタンス変数」と呼ぶ
「クラスインスタンス変数」は、継承関係があっても値は共有されない (それぞれのクラスで管理される)
@@で始まる変数はクラス変数です。クラス変数はクラス定義の中で定義され、クラスの特異メソッド、インスタンスメソッドなどから参照/代入ができます。
クラス変数はクラス自身のインスタンス変数とは以下の点で異なります。
サブクラスから参照/代入が可能
インスタンスメソッドから参照/代入が可能
クラス変数は、そのクラスやサブクラス、それらのインスタンスで共有されるグローバル変数であるとみなすことができます。
`$'で始まる変数はグローバル変数で、プログラムのどこからでも参照できます(その分、利用には注意が必要です)。グローバル変数には宣言は必要ありません。初期化されていないグローバル変数を参照した時の値はnilです。
関連URL
インスタンス変数はRubyの1つのオブジェクトの性質を定義するに使う。 〜中略〜 このアットマークは属性(attribute)を意味すると考えればいい。
二重のアットマークは、すべてに属性をつける(attribute all)という意味だと考えればいい