On 14.06.2008 19:38, Phlip wrote:
> Sebastian Hungerecker wrote:
> 
>> Rob Boellaard wrote:
> 
>>>   If I have class A and class B, and they both inherit from S.
>>> And in S there is a class method called doSomething.
> 
>> self will be A or B.
> 
> self.class.name will == 'A' or 'B'

No, self.name will be "A" or "B" - self.class.name is "Class". 
Remember, we are talking about a class method.

irb(main):001:0> class Base
irb(main):002:1> def self.x
irb(main):003:2> [self.class.name, self.name]
irb(main):004:2> end
irb(main):005:1> end
=> nil
irb(main):006:0> class A<Base;end
=> nil
irb(main):007:0> class B<Base;end
=> nil
irb(main):008:0> A.x
=> ["Class", "A"]
irb(main):009:0> B.x
=> ["Class", "B"]
irb(main):010:0>

I would not use the name but rather self (the class object) itself if I 
would want to do some class specific stuff, but:

> Tip: Using this information, such as in an 'if' statement, leads to bad
> design. The purpose of OO programming is polymorphism. A and B should have
> derived methods that doSomething calls. That's the Abstract Template
> pattern.

Absolutely agree.

Kind regards

	robert