Wie definiere ich dynamisch eine Klasse in Ruby MIT einem Namen?
Ich weiß, wie man eine Klasse dynamisch ohne Namen erstellt, indem man Folgendes verwendet:
dynamic_class = Class.new do
def method1
end
end
Sie können jedoch keinen Klassennamen angeben. Ich möchte eine Klasse dynamisch mit einem Namen erstellen .
Hier ist ein Beispiel dafür, was ich tun möchte, aber natürlich funktioniert es nicht wirklich.
(Beachten Sie, dass ich keine Instanz einer Klasse erstelle, sondern eine Klassendefinition.)
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
Tatsächliche Ausgabe:
dummy: TestEval
dummy2:
Gewünschte Ausgabe:
dummy: TestEval
dummy2: TestEval2
================================================== ====
Antwort: Eine völlig dynamische Lösung mit der Methode von sepp2k
dynamic_name = "TestEval2"
Object.const_set(dynamic_name, Class.new) # If inheriting, use Class.new( superclass )
dummy2 = eval("#{dynamic_name}")
puts "dummy2: #{dummy2}"