Как определить динамическую константу в рубине?

Пытаюсь воссоздать case_class (как из Scala), но на Ruby. так что я пробовал

def case_class name
  Object.const_set name, Class.new {}
end 

но получаю: NameError: неинициализированная константа...

Я пытался найти, какой метод вызывает эту ошибку, но я не смог ее найти. напр. переопределение "const_missing" в Object, но я продолжаю получать ту же ошибку


person FrankIglesias    schedule 07.04.2017    source источник
comment
С вашим кодом и вызовом case_class('Demo') он создает класс под названием Demo, и ошибок нет. Помните, что вам нужно будет сделать это перед использованием этого класса в любом коде или, возможно, загрузкой любых файлов, которые ссылаются на этот класс во время синтаксического анализа.   -  person tadman    schedule 07.04.2017
comment
Да, но я стараюсь не называть это так. Он должен работать без круглых скобок, как case_class Demo.   -  person FrankIglesias    schedule 07.04.2017
comment
Нет, не могу этого сделать. Единственный способ, которым этот код действителен, - это если Demo является допустимой константой, что не так, пока этот метод не будет выполнен. Словить 22.   -  person tadman    schedule 07.04.2017
comment
Вы также можете установить константу внутри блока Class.new, то есть: Class.new { |klass| Object.const_set(name, klass) }   -  person Stefan    schedule 07.04.2017
comment
@FrankIglesias Кстати, как вы думаете, это дубликат? Помогает ли вам другой вопрос решить проблему?   -  person Stefan    schedule 07.04.2017
comment
@Stefan Я прочитал другой вопрос, но у меня все та же постоянная ошибка. Я пытаюсь выяснить, кто обрабатывает несуществующие константы.   -  person FrankIglesias    schedule 07.04.2017
comment
Yeah but I'm trying not to call it that way. It need to work without parenthesis, just like "case_class Demo" - ваш код работает без ошибок.   -  person Andrey Deineko    schedule 07.04.2017
comment
@FrankIglesias который обрабатывает несуществующие константыModule.const_missing   -  person Stefan    schedule 07.04.2017
comment
@Стефан, это работает!!!!!! Большое спасибо   -  person FrankIglesias    schedule 07.04.2017