Daniel Berger schrieb:
> I came across a technique for aliasing methods that I have never seen
> before [1] and was just too good to pass up. (...)

Dan, this is a nice technique indeed (not new, but still nice), but it 
comes with a performance penalty:

   class HashUsingAlias < Hash
      alias :old_hset :[]=

      def []=(key, value)
        self.old_hset(key, value)
      end
   end

   class HashUsingBind < Hash
      hset = self.instance_method(:[]=)

      define_method(:[]=) do |key, value|
        hset.bind(self).call(key, value)
      end
   end

   require "benchmark"

   def bm_report bm, title, hash_class
     hash = hash_class.new
     bm.report title do
       100_000.times do
         hash[ 1 ] = 1
       end
     end
   end

   Benchmark.bmbm do |bm|
     bm_report bm, "original", Hash
     bm_report bm, "alias", HashUsingAlias
     bm_report bm, "bind", HashUsingBind
   end

On my system, I get the following results:

                  user     system      total        real
   original   0.062000   0.000000   0.062000 (  0.062000)
   alias      0.141000   0.000000   0.141000 (  0.140000)
   bind       0.656000   0.000000   0.656000 (  0.657000)

Regards,
Pit