クラス変数は@@を使って定義する。インスタンス変数と違って初期化されていないとエラーになるので嫌な感じ。
class Hoge def self.hoge= v @@hoge = v end def self.hoge @@hoge end end Hoge.hoge = "ほげ" p Hoge.hoge
@@を使わずにクラスに特異メソッドをくっつけてクラス変数とすることもできるようだ。
class Hoge class << self attr_accessor(:hoge) end end Hoge.hoge = "ほげ" p Hoge.hoge
こちらは初期化されていなくてもエラーにならないが、@@で定義した変数とは無関係で@@hogeは未定義の変数になる。
おそらく前者はクラスに属している本当のクラス変数だが、後者はHogeクラスというインスタンスのhogeというフィールド、クラスインスタンスのインスタンス変数なのだろう。