> M.[] needs to return a subclass of T (lets call it S) so that calls > S.new(c) are translated to T.new(am,bm,c). > Note I am cheating;-) class T def initialize(a,b,k) p "#{a} #{b} #{k}" end end module M T = T def M.[](*l) s = Class::new (T) s.const_set :L, l.dup s.class_eval %{ def initialize (*r,&b); super (*(L + r),&b) end } return s end end Bla = M[1,2] Bla.new 5