Rubyで UNIVERSAL::require 風に new するやつ
module ClassFactory def get( str, force = false ) begin mod = str.to_s.split( /::|\./ ) if mod.length == 1 return Module.const_get( mod.shift ) else @target = Module.const_get( mod.shift ) while mod.length != 0 @target = @target.const_get( mod.shift ) end return @target end rescue StandardError if force return @target else raise NameError, "Can\'t get class: #{str}" end end end def create( name, *args ) return self::get( name ).new( *args ) end module_function :get, :create module Module def new( *args ) ClassFactory::create( self.to_s, *args ) end def to_klass ClassFactory::get( self.to_s ) end end end class String include ClassFactory::Module end class Symbol include ClassFactory::Module end p "Object".new => #<Object:0xb7fb9074>
eval つかってない!!(笑
こんな感じでいいのかなぁ。