2009-03-10 31 views

答えて

3

in_channelまたは​​とすることはできません。ここではいくつかの提案があります:あなたが読んでいた文字をバック入れている場合は

  1. は、あなたが要素を削除するのではなく、ストリームを検査するために使用peekを使用する場合があります。

  2. あなたは、その機能のC-Interfaceを直接書く運があるかもしれません。私はこれが本当に悪い考えであることを知ることができます。

  3. 代わりにアキュムレータを使用したことはありますか?

  4. ファスナーやスタック、または文字のプッシュバックを可能にする他の構造のタイプを使用して、現在の機能のモジュールを記述します。

2

OCaml Batteries Includedは、ストリームのためのはるかに包括的かつはるかに高いレベルのインターフェイスを備えています。あなたはこれを見ることができます。プラス、一般的に、それは良いです。

+0

バッテリは良好ですが、IOストリームでこの機能を(直接的に)サポートしていません。 –

+0

実際、IO抽象化はOCaml標準ライブラリのIO抽象化に反対することでそれを防ぐものではありません。だからそれは追加することができます。これは何もないより優れています。 – Yoric

1

基本的には:できません。バッテリ(およびExtlib)は拡張I/Oラッパーを提供しますが、どちらもこの機能をサポートしていません。

ただし、キャラクターレベルの読み取りのみを行い、I/OストリームをEnum(バッテリー付きのBatEnum)にラップする場合は、バッテリーまたはExtlibでエミュレートすることができます。 Enumは一般的な列挙型で、「次の値を取得する」タイプのインターフェイスを提供し、値を列挙型の先頭に戻すことができます。したがって、Enum.next関数で文字を返すタイプchar Enum.tの列挙型でstdinをラップし、Enum.pushを使用して、不要な文字を前面に押し戻すことができます。それは、その後、可能かもしれないあなたが最初にそれらのモジュールが混乱押し上げ文字の意味をだろう内部バッファリングを行わないことを確認した場合、より柔軟なインタフェースのためIOBatIO)で、このような列挙型を再ラップする

関連する問題