From: yamada masaki Date: 2010-09-10T18:28:42+09:00 Subject: [ruby-list:47390] Re: class variable of singleton class はじめまして まさらっき (@masarakki) です #1. class A ; @@a = 1 ; end #2. class A class << self ; class_variables ; end end #=> [] #3. class A class << self ; @@b = 1 ; end end #4. class A class << self ; class_variables ; end end #=> [] #5. class << A ; class_variables ; end #=> [] #6. class << A ; @@c = 1 ; end # warning! #7. class << A ; class_variables ; end #=> ["@@c"] #8. class A class << self ; class_variables ; end end #=> ["@@c"] #9. class << A class << self ; @@d = 1 ; end end #10. class << A ; class_variables ; end #=> ["@@c", "@@d"] (ruby1.8.7です) 何か意図があるのかも知れませんが、 #3-#5 の動作と #6-#8 の動作に整合性がないと感じます 2010年9月10日17:24 NARUSE, Yui : > 成瀬です。 > > 2010年9月10日16:53 Hiroki Yoshioka : >> 代わりにクラスAのクラス変数になっています。 >> >> class A >> @@a >> end # => 1 > > irb(main):001:0> class A;class << self; p self;@@a=1;end;end > # > なので、クラスAのクラス変数になるのは正しいです。 > クラスAのメタクラスはクラスAなのです。 > >> class << A >> @@a >> end # => NameError: uninitialized class variable @@a in Object > > これで @@a を参照できないことこそがバグなような気がします。 > > -- > NARUSE, Yui > naruse@airemix.jp > >