newを書かずにインスタンス生成
newを書かずにインスタンス生成 - rubyco(るびこ)の日記より。id:rubycoさんはClass#inheritedにてグローバル変数を設定してからトップレベルでeval、コメントのid:sumimさんはevalの引数にトップレベルのBindingを明示的に指定している。そのほかの方法として、組み込み関数を定義するにはKernelモジュールのインスタンスメソッドとして実装してもよいみたい:
class Class def inherited(subclass) Kernel.instance_eval do define_method(subclass.to_s) do |*args| subclass.new(*args) end end end end class C1 end class C2 def initialize(*args) @args = args end end p C1() # => #<C1:0x100f5fd0> p C2("foo") # => #<C2:0x100f5f40 @args=["foo"]>