クラス変数・クラスインスタンス変数
こちらが詳しい。
クラスインスタンス変数
試してみる。
class Hoge @@class_hensu = 0 @class_instance_hensu = 0 def self.add_class_hensu @@class_hensu += 1 end def self.add_class_instance_hensu @class_instance_hensu += 1 end def self.class_hensu @@class_hensu end def self.class_instance_hensu @class_instance_hensu end end ?> Hoge.add_class_hensu => 1 >> Hoge.add_class_hensu => 2 >> Hoge.add_class_hensu => 3 >> Hoge.class_hensu => 3 >> Hoge.add_class_instance_hensu => 1 >> Hoge.add_class_instance_hensu => 2 >> Hoge.add_class_instance_hensu => 3 >> Hoge.class_instance_hensu => 3 >> class Bar < Hoge >> end => nil >> Bar.class_hensu => 3 >> Bar.class_instance_hensu => nil >> Hoge.class_variables => ["@@class_hensu"] >> Bar.class_variables => ["@@class_hensu"] >> Hoge.instance_variables => ["@class_instance_hensu"] >> Bar.instance_variables => []
なるほど。。クラス変数は継承されるけど、クラスインスタンス変数は継承されない。
(継承という言い方は適当ではない気がする)
Class Variablesによると、
1.9では動作が異なるらしい。
試してみる。
C:\ruby-1.9.0-2-i386-mswin32\bin>irb irb(main):001:0> class Hoge irb(main):002:1> @@class_hensu = 0 irb(main):003:1> @class_instance_hensu = 0 irb(main):004:1> irb(main):005:1* def self.add_class_hensu irb(main):006:2> @@class_hensu += 1 irb(main):007:2> end irb(main):008:1> irb(main):009:1* def self.add_class_instance_hensu irb(main):010:2> @class_instance_hensu += 1 irb(main):011:2> end irb(main):012:1> irb(main):013:1* def self.class_hensu irb(main):014:2> @@class_hensu irb(main):015:2> end irb(main):016:1> irb(main):017:1* def self.class_instance_hensu irb(main):018:2> @class_instance_hensu irb(main):019:2> end irb(main):020:1> end => nil irb(main):021:0> Hoge.add_class_hensu => 1 irb(main):022:0> Hoge.add_class_hensu => 2 irb(main):023:0> Hoge.add_class_hensu => 3 irb(main):024:0> class Bar < Hoge irb(main):025:1> end => nil irb(main):026:0> Bar.class_hensu => 3
あれ?いっしょちゃう?