如何将字符串转换"User"
为User
?
Answers:
Object.const_get("User")
无需ActiveSupport。
class User; def self.lookup; const_get('SomeClassName);end; end
User.lookup
将返回类本身。
推荐的方法是使用ActiveSupport的常量:
'User'.constantize
您还可以使用Kernel's const_get
,但是在Ruby <2.0中,它不支持命名空间常量,因此如下所示:
Kernel.const_get('Foobar::User')
在Ruby <2.0中将失败。因此,如果您需要通用的解决方案,明智的做法是使用ActiveSupport方法:
def my_constantize(class_name)
unless /\A(?:::)?([A-Z]\w*(?:::[A-Z]\w*)*)\z/ =~ class_name
raise NameError, "#{class_name.inspect} is not a valid constant name!"
end
Object.module_eval("::#{$1}", __FILE__, __LINE__)
end
'User'.safe_constantize