From: Lars Christensen Date: 2001-11-17T01:09:55+09:00 Subject: [ruby-talk:25464] Getting a class object from a string containg its name I need to get a reference to a class object from a string with the name of the class. I want to do this in a secure way because the string comes from an external source. I could not find any easy way to convert a string or symbol to a class reference. I found two approaches though: 1. Using eval class NoSuchClassError < Exception; end class NotClassError < Exception; end def findClass(classname) raise NotClassError unless classname =~ /^[A-Z]\w*$/ begin eval(classname) rescue NameError raise NoSuchClassError end end 2. Using ObjectSpace::each_object(Class) class NoSuchClassError < Exception; end def findClass(classname) each_object(Class) { |obj| return obj if obj.name == classname } raise NoSuchClassError end I dislike using eval() due to security concerns. Although I catch strings such as 'system("rm *")' using the regular expression, what about everything else that evaluates in the context, like constants? Using each_object(class) is very inefficient, especially when there is many classes. Did I overlook some easy way to look up a symbol or string in the namespace of Classes? -- Lars Christensen, larsch@cs.auc.dk