David A. Black wrote: > Hi -- > > On Mon, 3 Oct 2005, Mark Volkmann wrote: > >> These seem to be identical. Are they? >> >> class Foo >> def Foo.bar >> # some code >> end >> end >> >> class Foo >> def self.bar >> # some code >> end >> end >> >> If they are identical, is one form generally preferred over the other? > > > The advantage of the self version is that it might be a little easier > to maintain (e.g., if you change the name of the class). > >> So a "class method" is the same as a "singleton method" on a Class >> object? > > > Basically, yes. I think the main difference is that they have a bit > of language-level "special case" status. There's the class_methods > method, which makes them "official". Also, because of the way > classes' singleton classes work, a subclass can actually call the > singleton methods of its parent class: > > class C > def self.x > puts "Calling x on #{self}" > end > end > > class D < C > end > > D.x # Calling x on D > > As far as I know that's the only situation where an object can call > another object's singleton method. Hm? class Foo end f = Foo.new def f.foo() puts 'foo' end f.foo > ... That may be enough to warrant a > different term for them. I have to say, though, I've seen the class > method/singleton method relation serve as the "ah ha!" moment for > many, many people grappling with singleton stuff in Ruby (even if it > turns out to be a somewhat special case). > > > David E