Как преобразовать строку "User"
в User
?
Как преобразовать строку в константу в Ruby?
Ответ 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
Ответ 5
Вы можете использовать метод const_set(name, value)
.
Ответ 6
Используйте метод магии ruby: eval()
:
eval("User") #=> User