Frage

ist es ein Äquivalent zu dem C ++ Methode istream::putback(char) für OCaml?

Wie kann ich einen Charakter zu Anfang hinzufügen stdin

War es hilfreich?

Lösung

Sie können es nicht mit einem in_channel oder mit Stream.t. Hier sind einige Vorschläge:

  1. Wenn Sie ein Zeichen setzen zurück Sie gelesen hatte, möchten Sie vielleicht den Einsatz peek zu untersuchen, den Strom anstelle des Entfernens des Elements.

  2. verwenden
  3. Sie könnten etwas Glück haben eine C-Schnittstelle zu dieser Funktion direkt zu schreiben. Ich sehe dies eine wirklich schlechte Idee zu sein.

  4. Haben Sie einen Speicher anstelle betrachtet mit?

  5. Schreiben Sie ein Modul um die aktuellen Funktionen mit einem Typ, der ein Reißverschluss oder stapeln oder eine andere Struktur, die zurück Zeichen drängen ermöglicht.

Andere Tipps

OCaml Batterien im Lieferumfang enthalten eine viel umfassenderen Funktionen und viel höherer Ebene Schnittstelle für Streams. Sie könnten einen Blick auf diese. Plus, in der Regel, es ist gut.

Grundsätzlich gilt: Sie können es nicht. Batterien (und extlib) bieten einen verbesserten I / O-Wrapper, aber keiner von ihnen diese Funktion unterstützen.

Sie können jedoch emulieren es entweder mit Batterien oder extlib, wenn Sie bereit sind, nur auf Zeichenebene zu tun, liest, bu den I / O-Stream in einer Verpackung Enum ( BatEnum mit Batterien). Enum stellt eine allgemeine Aufzählung mit einer Art der Schnittstelle „nächsten Wert erhalten“, und ermöglicht es Ihnen, Werte drücken wieder auf die Vorderseite des ENUM. So können Sie stdin in einer Enum-Typ char Enum.t wickeln, die Zeichen mit seiner Enum.next Funktion gibt, und dann Enum.push verwenden, um die unerwünschten Zeichen wieder auf den vor ihm zu drücken.

Es kann möglich sein, dann wieder zu wickeln, eine solche Enum mit IO ( BaTiO ) für eine flexible Schnittstelle, wenn Sie überprüft zuerst, dass diese Module führen keine interne Pufferung das würde vermasseln die Semantik von Zeichen drücken.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top