From: Koji Arai Date: 2000-11-22T04:07:16+09:00 Subject: [ruby-dev:11631] Re: class variable 新井です。 > まつもと ゆきひろです > ||これは「特異クラスはクラス変数を持てない」というルールがある > ||ということでしょうか? > | > |むむむ、ちょっと自分でも混乱してきたの頭を冷やして考えてみま > |す。確かにクラス変数は難しいです。 > > というわけで、できたみたいです。 > CVSで確認してみてください。 ruby 1.6.2 (2000-11-21) [i586-linux] で確認しました。つまり、 ・特異クラスのコンテキストでのクラス変数は (A) 特異クラスのインスタンス(と言っていいの?)がクラスならそのクラス変数 (A') そうでなければ特異クラスのクラス変数 ・特異クラスのメソッド定義のコンテキストでのクラス変数は (B) 特異クラスのインスタンスがクラスならそのクラス変数 (B') そうでなければそのオブジェクトのクラスのクラス変数 ですか? class Class @@klass = 1 end class Foo @@foo = 2 end class << Foo # (A) @@bar = 3 # Fooのクラス変数 p class_variables # => [@@klass] 特異クラスのクラス変数 def foo # (B) p class_variables # => [@@bar, @@foo] Fooのクラス変数 p [@@foo, @@bar] # => [2, 3] end end foo = Foo.new class << foo # (A') @@baz = 4 # 特異クラスのクラス変数 p class_variables # => [@@baz, @@foo] 特異クラスのクラス変数 def foo # (B') p type.class_variables # => [@@bar, @@foo] Fooのクラス変数 p [@@foo, @@bar, @@baz] # => [2, 3, 4] end end Foo.foo foo.foo 複雑さに追い打ちをかけるようにコンテキストで参照できるクラス 変数とclass_variablesの出力が異なりますね。仕方ないんだけど。 えっと、(A')はFooのクラス変数が良いように思うのです。 クラス変数はそのクラスのインスタンス間での情報共有が目的だと 思うのですが、特異クラスのクラス変数にその役割は持てないので はないでしょうか? 以下、用語の話 class <