Nehmen wir an, wir diese Ruby-Klasse haben:Wo sind die Singleton-Konstanten der Ruby-Klasse gespeichert?
class MyClass
class << self
MC_CONST = 30
end
end
Dann lassen Sie uns MyClass
instanziiert und eine weitere Konstante auf die Metaklasse Objekt hinzufügen:
m = MyClass.new
class << m
OBJ_MC_CONST = 50
end
Es gibt keine Probleme mit dem Objekt Singletons Konstante:
m.singleton_class::OBJ_MC_CONST # => 50 <-- [OK]
m.singleton_class.constants.include? :OBJ_MC_CONST # => true <- [OK]
Aber nicht genau das, was ich mit der Klasse Singleton Konstante erwarten würde:
MyClass.singleton_class::MC_CONST # => 30 <-- [OK]
MyClass.singleton_class.const_get :MC_CONST # => 30 <-- [OK]
MyClass.singleton_class.constants.include? :MC_CONST # => false <-- [Why???]
Warum auf der Erde das Array von .constants
Verfahren auf metaclass von MyClass
Klasse zurückgegeben nicht enthalten: MC_CONST? Was fehlt mir hier?
Vielen Dank.
EDIT 1: Dies scheint doch ein Fehler in MRI 2.x zu sein. Ich habe ein neues Problem mit dem Ruby-Kernteam eingereicht: https://bugs.ruby-lang.org/issues/9413, um dies zu beheben.
EDIT 2: Dieser Fehler wurde in https://bugs.ruby-lang.org/projects/ruby-trunk/repository/revisions/44628/diff/
Vielen Dank für die Eingabe. Im aktuellen MRI scheint ich ein Fehler zu sein. Ich habe ein neues Problem mit dem Ruby-Kernteam eingereicht. Ich werde die Beschreibung mit der Ausgabe-URL aktualisieren. – demisx