Символ Ruby к классу

Одно из основных отличий - то, что Веб-сайты компилируют динамично и создают непрерывные блоки. Сеть applicaitons компилирует в один большой блок.

с различием между этими двумя покончили в Visual  Studio  2008.

34
задан intargc 5 August 2009 в 20:37
поделиться

4 ответа

Есть много способов сделать это. Отсутствие контекста делает невозможным выбор «лучшего» пути. Вот несколько вариантов.

Kernel.const_get(:Bob)

eval(:Bob.to_s)

Kernel.const_get(:bob.to_s.capitalize)
53
ответ дан 27 November 2019 в 16:02
поделиться

NameSpace.const_get (имя класса) вернет объект класса (при условии, что имя класса содержит имя класса - если оно содержит имя константы, не являющейся классом, оно вернет значение этой константы). Пространство имен верхнего уровня - это Object, поэтому вы можете сделать Object.const_get (: Bob) .new

5
ответ дан 27 November 2019 в 16:02
поделиться

Rails

Для использования только с 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

40
ответ дан 27 November 2019 в 16:02
поделиться
class Bob
end

def create(name)
  return eval("#{name}.new")
end

b = create(:Bob)
puts b.class
3
ответ дан 27 November 2019 в 16:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: