如何将字符串转换为类名,但前提是该类已经存在?
如果Amber已经是一个类,我可以通过以下方式将字符串从该类中获取:
Object.const_get("Amber")
或(在Rails中)
"Amber".constantize
但是,NameError: uninitialized constant Amber
如果Amber还不是一门课,那么这两种方法都将失败。
我的第一个想法是使用该defined?
方法,但它不会区分已经存在的类和不存在的类:
>> defined?("Object".constantize)
=> "method"
>> defined?("AClassNameThatCouldNotPossiblyExist".constantize)
=> "method"
因此,在尝试转换字符串之前,如何测试字符串是否为类命名?(好吧,begin
/rescue
块捕获NameError错误怎么样?太丑陋了吗?我同意...)
defined?
在该示例中,它确实正在执行应做的事情:它检查是否constantize
已定义String对象上的方法。不管字符串是否包含“ Object”或“ AClassNameThatCouldNotPossfullyExist”。