Одно из основных отличий - то, что Веб-сайты компилируют динамично и создают непрерывные блоки. Сеть applicaitons компилирует в один большой блок.
с различием между этими двумя покончили в Visual Studio 2008.
Есть много способов сделать это. Отсутствие контекста делает невозможным выбор «лучшего» пути. Вот несколько вариантов.
Kernel.const_get(:Bob)
eval(:Bob.to_s)
Kernel.const_get(:bob.to_s.capitalize)
NameSpace.const_get (имя класса)
вернет объект класса (при условии, что имя класса содержит имя класса - если оно содержит имя константы, не являющейся классом, оно вернет значение этой константы). Пространство имен верхнего уровня - это Object, поэтому вы можете сделать Object.const_get (: Bob) .new
Для использования только с Rails.
Со строкой:
"Module".constantize #=> Module
"Class".constantize #=> Class
С символом:
:module.to_s.classify.constantize #=> Module
:open_struct.to_s.classify.constantize #=> OpenStruct
Если вы имеете дело с символом из нескольких слов , тогда вам нужно добавить в цепочку #classify
, чтобы правильно обрабатывать заглавные буквы во всех частях константы.
http: / /api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-constantize
class Bob
end
def create(name)
return eval("#{name}.new")
end
b = create(:Bob)
puts b.class