Ruby 1.9 でクラス変数が継承されないのは間違い
Ruby 1.9 でクラス変数が継承されないのは間違い
9. クラス変数が継承されない
クラス変数は継承といいますか親子のクラス間で共有されてました。ActiveRecord なんかはこれに依存したコードになっていたような気がしますので、1.9 では書き直しですね。no title
あれこれ最近のだと昔(1.8のような)の挙動になったんじゃなかったっけ。
class Foo
@@class_var = 'foo'
def self.class_var=(s)
@@class_var = s
end
def self.class_var
@@class_var
end
end
class Bar < Foo
end
puts Foo.class_var
puts Bar.class_var
Foo.class_var = 'change'
puts Foo.class_var
puts Bar.class_var
実行してみる。
$ ruby classvar.rb
foo
foo
change
change
$ ruby1.9 --version
ruby 1.9.0 (2007-06-06 patchlevel 0) [i486-linux]
$ ruby1.9 classvar.rb
foo
foo
change
change
というわけで、クラス変数はきちんと子クラスからも同一の変数を参照できてるとおもいます。