>R>          alias old_new Hash.new
> If you give this syntax you give also the possibility to write :
>            alias Hash.new Array.new

Yes, i see the problem.

[discussion on anonymous classes]

Thank you for your succinct and very illuminating examples.  I appreciate
it.

I think I've finally got what is going on:

1.  Use the    class <<  X   
                 ...
               end

    notation to define singleton methods.  Since singleton methods are
    associated -only- with a -single- object (class or instance) the behind
    the scenes mechanism is (now) quite logical:

2.  How the singleton methods are associated with X depends on what X is:

     . if X is an existing class then the methods just get added to X as
       class methods (naturally, no need for an anonymous class).

     . if X is an instance, since the only way we can associate methods with
       instances is thru their parent class, an anonymous class is created
       (if it doesn't exist already) and the methods are added as instance
       methods.   [We need the new anonymous class parent as adding the new
       methods to the existing parent would obviously make it available to
       all instances.]

If X is a class that already exists the methods just get added to that
class. Hence for redefining the behavior of Hash.new  (which is what started
me on this trail) rather than:

   class Hash
     class << self
        ...
     end
   end

One could have avoided the 'self' and just said:

   class << Hash
     - redefine new -
   end

I'm enlightened.  Thank you.

Raja