如何在Ruby中将string转换为常量?

如何将string"User"转换为User

 Object.const_get("User") 

无需要求ActiveSupport。

你可以使用Module#const_get方法。 例:

 irb(main):001:0> ARGV => [] irb(main):002:0> Kernel.const_get "ARGV" => [] 

如果你有ActiveSupport加载(例如在Rails中),你可以使用

 "User".constantize 

推荐的方法是使用ActiveSupport的常量化:

 'User'.constantize 

你也可以使用Kernel的const_get ,但是在Ruby <2.0中,它不支持命名空间常量,所以像这样:

 Kernel.const_get('Foobar::User') 

将在Ruby <2.0中失败。 所以,如果你想要一个通用的解决scheme,你会明智的使用ActiveSupport方法:

 def my_constantize(class_name) unless /\A(?:::)?([AZ]\w*(?:::[AZ]\w*)*)\z/ =~ class_name raise NameError, "#{class_name.inspect} is not a valid constant name!" end Object.module_eval("::#{$1}", __FILE__, __LINE__) end 

使用ruby魔法: eval()

 eval("User") #=> User