クラス変数の使い方


クラス変数とクラス定数
同一のクラスの複数のオブジェクトで、一つの変数を共有したいときがある。このような場合には、クラス変数を用いると良い。rubyでは、クラス変数は@@で始まる。

class Test
  @@v=0
  def initialize()
    @@v+=1
  end
  def v
    @@v
  end
end
t1=Test::new
p t1.v
t2=Test::new
p t1.v

とすると、生成したオフジェクトの数が表示される。一方、クラス定数も複数のオフジェクトで共有できるが、メソッド中での代入はできない。しかし、

class Test
  V=[]
  def initialize()
    V<<1
  end
end
t1=Test::new
p Test::V
t2=Test::new
p Test::V

などとすると、変更は可能である。このあたりがどのようになっているのかよく理解できていない。当然のことだが、変更が必要な場合には、クラス変数を用いると良いのだろう。