Wie erstellen Sie eine benutzerdefinierte Unterklasse von IO in Ruby?

9

Wie mache ich meine eigene Klasse, die IO ersetzen kann, um z.B. Umleitung / Aufnahme Eingabe / Ausgabe für einen Code, der einen IO-ähnlichen Parameter akzeptiert? IO selbst scheint mit OS-Dateideskriptoren gekoppelt zu sein und die einzige Klasse, die ich kenne, die es imitiert, ohne es zu unterklassifizieren, ist StringIO, das die gesamte Schnittstelle einfach neu zu implementieren scheint.

Ich würde denken, dass die Sprache einen einfachen Weg dazu bieten würde, aber ich kann keine Informationen zu diesem Thema finden. Gibt es ein Mixin, das die Schnittstelle auf ein paar Primitiven implementiert, wie Enumerable?

    
jedediah 10.05.2009, 10:41
quelle

2 Antworten

4

Ich vermute, dass ich etwas verpasse, aber angenommen, das ist nicht der Fall ...

Warum sollte Subclassing keine Option sein? Könnten Sie nicht einfach die Teile von IO überschreiben, die sich anders verhalten müssen?

%Vor%

Wenn Sie Ihre home-brew Unterklasse nicht ersetzen können, was ist mit dem Ändern von IO selbst ("Affe-Patching") etwas wie:

%Vor%     
Mike Woodhouse 10.05.2009 11:15
quelle
1

Ich habe erfolgreich den folgenden Hack verwendet, um StringIO zu einem "echten" IO zu machen:

%Vor%     
Patrick Dietrich 13.08.2009 12:33
quelle

Tags und Links