Как преобразовать строку в константу в Ruby? - PullRequest
63 голосов
/ 02 марта 2010

Как преобразовать строку "User" в User?

Ответы [ 5 ]

95 голосов
/ 18 сентября 2012
Object.const_get("User")

Нет необходимости требовать ActiveSupport.

61 голосов
/ 02 марта 2010

Вы можете использовать метод Module#const_get. Пример:

irb(main):001:0> ARGV
=> []
irb(main):002:0> Kernel.const_get "ARGV"
=> []
27 голосов
/ 02 марта 2010

Если у вас загружен ActiveSupport (например, в Rails), вы можете использовать

"User".constantize
26 голосов
/ 02 марта 2010

Рекомендуется использовать константу ActiveSupport:

'User'.constantize

Вы также можете использовать ядро ​​const_get, но в Ruby

Kernel.const_get('Foobar::User')

потерпит неудачу в Ruby <2.0. Поэтому, если вы хотите универсальное решение, вы должны использовать подход ActiveSupport: </p>

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
0 голосов
/ 01 апреля 2015

Используйте метод магии рубина: eval():

eval("User")  #=>  User
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...