クラス変数の使い方
クラス変数とクラス定数
同一のクラスの複数のオブジェクトで、一つの変数を共有したいときがある。このような場合には、クラス変数を用いると良い。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
などとすると、変更は可能である。このあたりがどのようになっているのかよく理解できていない。当然のことだが、変更が必要な場合には、クラス変数を用いると良いのだろう。