From: Robert Klemme Date: 2006-03-17T20:08:49+09:00 Subject: Re: Newbie: Reflection question(?) "Ross Bamford" wrote in message news:1142581508.1295.3.camel@jukebox.roscopeco... > On Fri, 2006-03-17 at 13:55 +0900, Gaudi Mi wrote: >> At runtime I have the name of a class in a string, and I want to call a >> method on the class having that name. How do I do that? > > Here are two possible ways: > > str = "Array" > # => "Array" > > ary_clz = eval(str) > # => Array > > ary_clz.class > # => Class > > ary_clz.new > # => [] > > ################## > > ary_clz = Object.const_get(str) > # => Array > > ary_clz.new > # => [] const_get is definitely preferred as it doesn't show the same security risks as eval does. Addtional note, for nested class names: name.split(/::/).inject(Object) {|cl,n| cl.const_get(n)}.address() Kind regards robert