On Apr 9, 2006, at 3:21 PM, Robert Dober wrote: > On 4/9/06, Brian Parkinson <parkI / whatevernot.com> wrote: >> >> Sven Klemm wrote: >> >> [deletia] >> >>> Module.const_get(s).new >> >> Thanks! >> >> I knew it would be a one-liner. :-) >> >> parki... > > > I am afraid that the only one-liner is eval :( > > suppose s contains the name of your class > Module.const_get s does not work unless your class is defined on > top level. > In oder to have the *same* semantics as > > eval(s).new > > we have to write > > m = Module > s.split(%r{::|\.}).each do > |name| > m = m.const_get(name) > end > m.new > > I suggest to look at ObjectSpace for another alternative, hardly more > efficent though :( > > Robert > > > -- > Deux choses sont infinies : l'univers et la bóŐise humaine ; en ce qui > concerne l'univers, je n'en ai pas acquis la certitude absolue. > > - Albert Einstein s.split(/::/).inject(Object) { |p, c| p.const_get(c) }.new There, a one liner (w/o any semi-colons)