如何使用类名来获得类?
如果我有classname = "String时,如何生成SomeClass类的实例呢?主要有两个解决方法。"
ruby 代码
- [1] eval(classname).new
- [2] Object.const_get(classname).new
第1种方法既简单又可以处理嵌套类(Net::HTTP等),但如果在CGI环境中滥用它的话,将十分危险。
而第2种方法却又无法处理嵌套类的问题。但如果进行以下处理的话,就可以处理嵌套类了。
ruby 代码
- # 如果只考虑Ruby 1.8之后的版本的话,可以这样
- cs = classname.split(/::/).inject(Object) do | c , name |
- c.const_get(name)
- end
- => String
- cs.new("Create a object from a string")
- => "Create a object from a string"