2009/11/15
■ [Ruby]クラス変数とクラスインスタンス変数
バディアシムシェ製作中、サーフェスの管理を考える際にそういう差異があるものだと初めて認知する。
class A @@a = "Class" @b = "ClassInstance of A" def self.getCI @b end def initialize end end class B < A @b = "ClassInstance of B" def initialize p self.class.getCI end end p A.getCI p B.getCI B.new
クラス変数@@aはクラスAとそのサブクラスであるクラスBで共有されるが、クラスインスタンス変数@bは各々のクラスのインスタンスのみで共有される。 従って上記コードの出力結果は
"ClassInstance of A" "ClassInstance of B" "ClassInstance of B"
となる。クラスメソッド内で参照する際にはクラス変数のようにはいかず逐一self.class.をつけねばならんのは面倒くさいと思うのは、恐らく私が特異メソッドのなんたるかをよく理解していない証左と思う。