如何将字符串转换为类名,但仅当该类已存在?如何检查课程是否定义?
Object.const_get("Amber")
或(在Rails)的
"Amber".constantize
但任何一项都将失败:
如果琥珀是已经一类,我可以从一个字符串通过得到的类如果Amber尚未成为课程,则为NameError: uninitialized constant Amber
。
我首先想到的是使用defined?
方法,但它并没有已经存在的类和那些不区分:
>> defined?("Object".constantize)
=> "method"
>> defined?("AClassNameThatCouldNotPossiblyExist".constantize)
=> "method"
那么,如何测试一个字符串名称的类我尝试转换它之前? (好吧,begin
/rescue
块怎样捕获NameError错误?太丑了?我同意...)
''定义的例子究竟做什么是应该做的:它检查是否定义一个String对象的'constantize'方法。它不关心该字符串是否包含“Object”或“AClassNameThatCouldNotPossiblyExist”。 – ToniTornado 2017-05-08 15:34:40