読者です 読者をやめる 読者になる 読者になる

Perl日記

PerlとかRubyとかPHPとかPythonとか

言語のクラス変数は違うはなし

「初めての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の方がクラスに属しているという意味でのクラス変数の感じがするかな。