Определение динамического класса с именем класса

Как мне динамически определить класс в Ruby С именем?

Я знаю, как создать класс динамически без имени, используя что-то вроде:

dynamic_class = Class.new do
  def method1
  end
end

Но вы не можете указать имя класса. Я хочу создать класс динамически с именем .

Вот пример того, что я хочу сделать, но, конечно, это не работает.
(Обратите внимание, что я создаю не экземпляр класса, а определение класса)

class TestEval
  def method1
    puts "name: #{self.name}"
  end
end

class_name = "TestEval"
dummy = eval("#{class_name}")

puts "dummy: #{dummy}"

dynamic_name = "TestEval2"
class_string = """
class #{dynamic_name}
  def method1
  end
end
"""
dummy2 = eval(class_string)
puts "dummy2: #{dummy2}" # doesn't work

Фактический результат:

dummy: TestEval
dummy2: 

Желаемый результат:

dummy: TestEval
dummy2: TestEval2

================== ====================================

Ответ: Полностью динамическое решение с использованием метода sepp2k

dynamic_name = "TestEval2"

Object.const_set(dynamic_name, Class.new) # If inheriting, use Class.new( superclass )
dummy2 = eval("#{dynamic_name}")
puts "dummy2: #{dummy2}"
69
задан Joshua Pinter 30 July 2019 в 15:36
поделиться