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

クラスのインスタンス変数の方が参照するスコープが小さいので意図しない場合はクラス変数よりもインスタンス変数で定義したほうが安全ですね。