Подтвердить что ты не робот

Как преобразовать строку в константу в Ruby?

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

4b9b3361

Ответ 1

Object.const_get("User")

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

Ответ 2

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

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

Ответ 3

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

"User".constantize

Ответ 4

Рекомендуемый способ - использовать константу ActiveSupport:

'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

Ответ 6

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

eval("User")  #=>  User