Ruby のクラス変数とクラスのインスタンス変数の違い
Ruby のクラス変数とクラスのインスタンス変数の違いの覚書。
クラス変数
Ruby で @@変数名
で変数を定義するとクラス変数として定義されます。
また、この変数は継承したクラスでも参照する事ができます。
class X @@class_variable = "hoge" end class Y < X pp @@class_variable # => "hoge" end
クラスのインスタンス変数
Ruby ではクラスもインスタンスオブジェクトなのでインスタンス変数を定義する事ができます。
これは『継承したクラス』では参照することはできません。
class X @instance_variable = "hoge" end class Y < X pp @instance_variable # => nil end
クラスのインスタンス変数の方が参照するスコープが小さいので意図しない場合はクラス変数よりもインスタンス変数で定義したほうが安全ですね。