A Day in the Life

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

というわけで、クラス変数はきちんと子クラスからも同一の変数を参照できてるとおもいます。

記事の一覧 >