今日気づいた勘違い
Rubyのクラス変数ってクラスとそのサブクラスでも共有されるんですね・・・。
# 親クラス class Parent # クラス変数 @@class_var = "parent" def class_var @@class_var end end # 派生クラス1 class SubClass < Parent @@class_var = "child" end # 派生クラス2 class SubClass2 < Parent @@class_var = "child2" end p Parent.new.class_var p SubClass.new.class_var p SubClass2.new.class_var
実行結果です。
child2 child2 child2
ずっとJavaのstatic変数と同じと思っていた・・・。Javaのstatic変数に近いのは、「クラスオブジェクトのインスタンス変数」ですね。
#親クラス class Parent #クラスのインスタンス変数 @class_var = "parent" def self.class_var @class_var end end # 派生クラス1 class SubClass < Parent @class_var = "child" def self.class_var @class_var end end # 派生クラス2 class SubClass2 < Parent @class_var = "child2" def self.class_var @class_var end end puts Parent.class_var puts SubClass.class_var puts SubClass2.class_var
実行結果です。
parent child child2
orz.