Як я динамічно визначаю клас у 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}"