On 5/4/06, Patrick Hurley <phurley / gmail.com> wrote: > On 5/4/06, Gregory Seidman <gsslist+ruby / anthropohedron.net> wrote: > > On Fri, May 05, 2006 at 03:51:39AM +0900, RGR wrote: > > } I want to create an object from a class, but the name of that class is > > } in a variable, so the form obj=Class.new(args) can't be used. How can it > > } be done? Without using eval, because its a bit messy and unelegant. > > } > > } The equivalent of obj=$variable_with_class_name(args) in php. > > > > obj = Object::const_get(class_name).new(args) > > > > } Thanks. > > } RGR > > --Greg > > > > > > > > And if args is an array you want to use as individual params: > > obj = Module.const_get(class_name).new(*args) > > (note I prefer Module. but both work) > pth > Ara is of course correct, so you end up with something like: klass = var_with_class.to_s.split('::').inject(Module) { |base,klass| base.const_get(klass) } obj = klass.new(*args) If this is a common operation in your code, you could add this into Module or some other reasonable place. pth