言語のクラス変数は違うはなし
「初めてのRuby(P151)」を読んでいたら以下のような記述があった。
class Foo @@class_variable = 'foo' def print p @@class_variable end end class Bar < Foo p @@class_variable #=> "foo" @@class_variable = 'bar' def print p @@class_variable end end foo = Foo.new foo.print #=> "bar" ←ここ☆ bar = Bar.new bar.print #=> "bar"
あれ、これってPerlだと違くね?、と思って似たようにやってみる。(イチから作るとnewを作るのが激しくめんどい)
package Foo; our $class_variable = 'foo'; sub p { print $class_variable,"\n" } sub new { bless {}, "Foo" } package Bar; our @ISA = ('Foo'); print $class_variable,"\n"; #=> "foo" our $class_variable = 'bar'; sub p { print $class_variable,"\n" } sub new { bless {}, "Bar" } package main; my $foo = Foo->new; $foo->p; #=> "foo" ←ここ☆ my $bar = Bar->new; $bar->p; #=> "bar"
やっぱり、子供のクラス変数を参照しに行ったりはしてなかった。
よかった覚えてたとおりで。
この辺りRubyは継承したら親元まで全部書きかえてしまうのね。
Perlの方がクラスに属しているという意味でのクラス変数の感じがするかな。