Gibt es eine Möglichkeit, mit diesem Selbstklassenaufruf von außerhalb der Klasse auf die Konstante zuzugreifen?
Es macht dies effektiv:
%Vor%Ich verstehe, dass ich die Konstante aus diesem Selbstanruf heraus bewegen kann, um dieses Problem einfach zu lösen. Ich bin mehr neugierig auf das Innenleben von Ruby.
Nicht genau, was Sie wollten, aber Sie haben CONST nicht innerhalb der Klasse A definiert, sondern in seiner Metaklasse, in der ich deshalb eine Referenz gespeichert habe ...
%Vor%Ihr Problem ist, dass Sie sich über die Bedeutung des Codes irren.
%Vor% entspricht nicht self.FOO = :bar
. Es ist extrem anders. Dies entspricht self.singleton_class.const_set(:FOO, :bar)
.
Ich nehme an, Sie gehen davon aus, dass class << self
bedeutet "nehmen Sie an, es gibt ein implizites" Selbst "vor allem, was ich hier schreibe" oder etwas in dieser Richtung (vielleicht denken Sie an die with
-Anweisung von JavaScript). Was es tatsächlich tut, bringt uns in den Kontext der Singleton-Klasse von self
, einer speziellen Klasse, von der das aktuelle Objekt die einzige Instanz ist. Sie definieren also die Konstante für die Singleton-Klasse des Objekts.
Um eine Konstante für eine Klasse zu definieren, schreiben Sie einfach:
%Vor%Auch wahrscheinlich nicht genau das, was du wolltest, seit du die Klasse A in A's Metaklasse referenzierst (was irgendwie ein Betrüger zu sein scheint), aber es ist etwas prägnanter.
%Vor%Für ein eingehendes Verständnis dessen, was hier vor sich geht, ist dieser Beitrag ziemlich informativ Ссылка
Tags und Links ruby