Grundlegende Metaprogrammierung: Erweitern einer bestehenden Klasse mit einem Modul?

7

Ich möchte, dass ein Teil meines Moduls die String-Klasse erweitert.

Dies funktioniert nicht

%Vor%

Aber das macht

%Vor%

Ich möchte nicht, dass alle anderen Funktionen von MyModule in String angezeigt werden. Es wieder auf höchster Ebene einzubinden, erscheint hässlich. Sicherlich gibt es einen besseren Weg, dies zu tun?

    
djb 30.08.2011, 11:22
quelle

2 Antworten

25

Die Methode exclaim in Ihrem ersten Beispiel wird in einer Klasse namens MyModule::String definiert, die nichts mit der Standardklasse String zu tun hat.

Innerhalb Ihres Moduls können Sie die Standardklasse String (im globalen Namespace) wie folgt öffnen:

%Vor%     
Lars Haugseth 30.08.2011, 12:34
quelle
1

Ich bin mir nicht sicher, ob ich Ihre Frage verstanden habe, aber warum öffnen Sie keine Zeichenfolge in einer Datei, sagen Sie exclaim.rb, und fordern Sie sie dann an, wenn Sie sie brauchen:

ausrufezeichen.rb

%Vor%

und dann

%Vor%

Aber vielleicht fehlt mir etwas?

    
lucapette 30.08.2011 11:32
quelle

Tags und Links