How do I dynamically define a class in Ruby WITH a name?
我知道如何使用以下内容动态创建一个类:
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
实际yields :
dummy: TestEval
dummy2:
期望输出:
dummy: TestEval
dummy2: TestEval2
======================================================
Answer: A totally dynamic solution using sepp2k's method
dynamic_name = "TestEval2"
Object.const_set(dynamic_name, Class.new) # If inheriting, use Class.new( superclass )
dummy2 = eval("#{dynamic_name}")
puts "dummy2: #{dummy2}"