From: B_DAVISON Date: 2000-03-20T15:38:23+00:00 Subject: [ruby-talk:02036] Anonymous and Singleton Classes I am a Ruby newbie and having some problems getting my mind around certain aspects of classes, especially anonymous classes and singleton classes. I composed a nice long mail to you all then realised that I should check the mail archive first and found the February thread "Singleton Classes". Now I am even more confused! I had just decided that class << obj; ...; end didn't actually create an anonymous class (even though FAQ 6.6 says it does) and then matz says that it does. class C1 def to_s ">>> C1.to_s" end end def C1.inherited(subclass) print ">>> inherited ", subclass, "\n" # never called end obj = C1.new class << obj def to_s super + " => C2.to_s" end end print obj, "\n" # >>> C1.to_s => C2.to_s print obj.type, "\n" # hmm, still says C1 print obj.type.id == C1.id, "\n" # true, it really is C1 Well it looks like it does when it comes to calling super() as C1.to_s gets called. But obj.type is unchanged and Class.inherited() doesn't get called. So what is going on? Actually Class.inherited() doesn't seem to get called when subclassing with Class.new() either. Is this a bug? ruby -v ruby 1.4.3 (1999-12-08) [i686-cygwin] class C1 end def C1.inherited(subclass) print ">>> inherited ", subclass, "\n" end class C3 < Class.new(C1) end print C3.ancestors.join(", "), "\n" outputs: >>> new subclass C3 C3, #, C1, Object, Kernel Thanks, Bob ----------------------------------------------------------------- Visit our Internet site at http://www.reuters.com Any views expressed in this message are those of the individual sender, except where the sender specifically states them to be the views of Reuters Ltd.