如何在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}"