如何将字符串"User"
转换为User
?
如何将字符串"User"
转换为User
?
Object.const_get("User")
无需要求ActiveSupport。
class User; def self.lookup; const_get('SomeClassName);end; end
User.lookup
将返回类本身。 - Artur INTECH您可以使用Module#const_get
方法。例如:
irb(main):001:0> ARGV
=> []
irb(main):002:0> Kernel.const_get "ARGV"
=> []
如果你已经加载了ActiveSupport(例如在Rails中),你可以使用以下代码:
"User".constantize
推荐的方法是使用ActiveSupport的constantize:
'User'.constantize
您也可以使用Kernel的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
。 - Eric Walker