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