Как динамически определить класс в 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}" # does not 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}"