如何将字符串"User"
转换为User
?
答案 0 :(得分:95)
Object.const_get("User")
无需要求ActiveSupport。
答案 1 :(得分:61)
您可以使用Module#const_get
方法。例如:
irb(main):001:0> ARGV
=> []
irb(main):002:0> Kernel.const_get "ARGV"
=> []
答案 2 :(得分:27)
如果您已加载ActiveSupport(例如在Rails中),则可以使用
"User".constantize
答案 3 :(得分:26)
推荐的方法是使用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
答案 4 :(得分:-5)
使用ruby magic方法:eval()
:
eval("User") #=> User