Hi --
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