Динамически определять именованные классы в Ruby

Я пишу внутренний DSL на Ruby. Для этого мне нужно программно создавать именованные классы и вложенные классы. Как лучше всего это сделать? Я понимаю, что есть два способа сделать это:

  1. Используйте Class.new для создания анонимного класса, затем используйте define_method , чтобы добавить к нему методы, и, наконец, вызовите ] const_set , чтобы добавить их как именованные константы в какое-то пространство имен.
  2. Используйте какой-то eval

Я тестировал первый способ, и он работал, но, будучи новичком в Ruby, я не уверен что использование классов как констант - правильный путь.

Есть ли другие, лучшие способы? Если нет, то что из вышеперечисленного предпочтительнее?

26
задан Little Bobby Tables 5 July 2011 в 13:26
поделиться