Ich bin sehr verwirrt von Rubys Verhalten bei der Definition von const_missing
und anderen Klassenmethoden innerhalb einer class << self
-Definition, im Gegensatz zur Verwendung der def self.foo
-Syntax.
Ich habe versucht, so etwas zu tun:
%Vor% Ich verwende meistens die class << self
-Syntax, um Klassenmethoden zu definieren. Es hat jedoch nicht wie erwartet funktioniert. const_missing
wird nie aufgerufen. Das obige führt zu einem NameError.
Das Definieren beider Methoden funktioniert wie erwartet:
%Vor% Ich dachte, dass die class << self
-Syntax nur eine andere Möglichkeit ist, Klassenmethoden zu definieren, aber vollkommen äquivalent zu def self.foo
? Ich habe das oben mit MRI 1.8.7, 1.9.2 und JRuby 1.5.6 getestet. Offensichtlich vermisse ich hier etwas?
Jeder Hinweis wird sehr geschätzt.
Danke, Martin
class << self
ist keine Verknüpfung zum Definieren von Klassenmethoden. Diese Syntax (ich kenne die genaue Benennung nicht) öffnet die Eigenklasse von einem Objekt (in Ihrem Fall eine Klasse). Damit können Sie Methoden für das Objekt definieren (keine Instanzmethoden). Wenn Sie jedoch eine Konstante in die Eigenklasse aufrufen, rufen Sie eine Konstante aus der Eigenklasse und nicht aus der Klasse auf. In diesem Fall müssen Sie eine Klassenmethode für die Eigenklasse in const_missing
definieren, zwei Möglichkeiten, dies zu tun: