如何在Ruby中将字符串转换为常量?

时间:2010-03-02 06:44:18

标签: ruby

如何将字符串"User"转换为User

5 个答案:

答案 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