From: "David A. Black" Date: 2005-10-03T12:07:25+09:00 Subject: Re: class/singleton methods 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. 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 -- David A. Black dblack@wobblini.net