Okay,

I figured what you really mend was something like this?

----------
class T
  def initialize(a,b,k)
    p "#{a} #{b} #{k}"
  end
end


module M
  T = T
  INITIALIZED = {[] => T}
  def M.[](*l)
     unless INITIALIZED.key? l
       s = Class::new (T)
       INITIALIZED[l] = s
       s.const_set :L, l.dup
       s.class_eval %{ def initialize (*r,&b); super (*(L + r),&b) end }
       return s
     else
       return INITIALIZED[l]
     end
end
end