Ara.T.Howard / noaa.gov wrote:

> not bad!  why do you suppose metaclasses don't have themselves as 
> ancestors?
> or perhaps put a better way - why DO normal classes?

Mebbe because #ancestors shows the path that method lookup will follow, 
_after_ checking for a singleton method.

irb(main):001:0> class << String; p ancestors; end
[Class, Module, Object, Kernel]
=> nil

There's no need to list the "metaclass" of String in the above, because 
method lookup always starts with that object, if it exists, in case a 
singleton method has been defined.

irb(main):002:0> class String; p ancestors; end
[String, Enumerable, Comparable, Object, Kernel]
=> nil

In this case, method lookup starts with the singleton class of the given 
string (if one has been created), and then looks in the instance methods 
of String, Enumerable, etc.