Ich habe den Eindruck, dass Klassendefinitionen in Ruby wieder geöffnet werden können:Lokale Variablen in Klassendefinitionen/Umfang
class C
def x
puts 'x'
end
end
class C
def y
puts 'y'
end
end
Dies funktioniert wie erwartet und y
in der ursprünglichen Klassendefinition hinzugefügt.
Ich bin verwirrt, warum der folgende Code funktioniert nicht wie erwartet:
class D
x = 12
end
class D
puts x
end
Dies in einer NameError
Ausnahme führen. Warum wird ein neuer lokaler Bereich gestartet, wenn eine Klasse wieder geöffnet wird? Dies scheint ein wenig kontraintuitiv. Gibt es eine Möglichkeit, den vorherigen lokalen Bereich fortzusetzen, wenn eine Klasse erweitert wird?
Dies ist eine gute Frage, auf seine eigene, aber gibt es einen Grund, warum Sie wollen tue dies, anstatt eine Instanzvariable auf dem Klassenobjekt selbst zu speichern (dh "x" durch "@ x" oben ersetzen)? – Phrogz
@Phrogz Nein, es gibt keinen Grund, warum ich das im Produktionscode machen möchte. Ich bitte darum, ein intellektuelles Problem zu kratzen, eher um ein Problem der realen Welt zu lösen. – Matty