From: ptkwt@...1.aracnet.com (Phil Tomson) Date: 2001-05-21T13:10:09+09:00 Subject: [ruby-talk:15453] Re: Newbye question: retrieving a Class by its classname In article <9e9c2a$1r8$1@wanadoo.fr>, Benoit Cerrina wrote: >Hi, >I've been retrieving a Class object by its class name by doing: > > def XmlElem.getClass4Name(name) > if(eval("defined? #{name} and #{name}.type == Class ")) > return eval("#name") > else > return nil > end > end > >it seems to work but is it the best way, I try to avoid using eval normally. I don't like over using eval either... You could use Module.const_get to do this since class names are constants. So, if you wanted to get a class called "MyKlass": instance = Module.const_get("MyKlass").new would do it. However, in the case where you need to get at a class defined in another class (such that the class hierarchy has "::" in it, you'll have to do something in addition. Look up "dynamic class instantiation" in deja.com under the comp.lang.ruby newsgroup - as I recall there is some code there for handling this case. Phil