Fehlende Konstante und "const_missing" innerhalb der "class self" Definition

8

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

    
martido 14.03.2011, 20:35
quelle

1 Antwort

12

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:

%Vor%     
Guilherme Bernal 14.03.2011, 20:53
quelle

Tags und Links