3

istream::putback(char)OCamlの C++ メソッドに相当するものはありますか?

stdinの先頭に文字を追加するにはどうすればよいですか?

4

3 に答える 3

3

in_channelまたはではできませんStream.t。以下にいくつかの提案を示します。

  1. 読んだ文字を元に戻す場合はpeek、要素を削除する代わりに use を使用してストリームを調べることができます。

  2. その関数への C インターフェイスを直接書くことができるかもしれません。これは本当に悪い考えだと思います。

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

  4. ジッパーまたはスタック、または文字を押し戻すことができるその他の構造であるタイプを使用して、現在の関数の周りにモジュールを記述します。

于 2009-03-10T17:19:53.527 に答える
2

OCaml バッテリー インクルードは、ストリーム用のより包括的で高レベルのインターフェイスを備えています。これを見てください。さらに、一般的に、それは良いです。

于 2010-01-16T10:44:35.670 に答える
1

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

ただし、文字レベルの読み取りのみを実行する場合は、バッテリーまたは Extlib を使用してエミュレートできますが、I/O ストリームをEnumでラップします( BatEnum with Batteries )。Enum は、「次の値を取得」タイプのインターフェイスを備えた一般的な列挙を提供し、値を列挙の前にプッシュすることができます。そのため、標準入力をその関数でchar Enum.t文字を返す型の列挙型でラップし、不要な文字をその前にプッシュするために使用できます。Enum.nextEnum.push

これらのモジュールが文字のプッシュのセマンティクスを混乱させる内部バッファリングを実行しないことを最初に確認した場合は、より柔軟なインターフェイスのためにそのような列挙型をIO ( BatIO ) で再ラップすることが可能かもしれません。

于 2010-02-08T04:30:29.357 に答える