16

in_channel -> out_channel -> unitに何かを出力するタイプの関数がありout_channelます。次に、その出力を文字列として取得したいと思います。書き込みと読み取りを行うための一時ファイルの作成は見苦しいようですが、どうすればよいですか?家族out_channel以外に作成する方法はありますか?Pervasives.open_out

実際、この関数はreplを実装しました。私が本当に必要としているのはプログラムでテストすることなので、最初にタイプの関数にラップしたいと思いstring -> stringます。の作成にはin_channel、を使用できるようですが、パラメータScanf.Scanning.from_stringの作成方法がわかりません。out_channel

4

2 に答える 2

7

OCaml Batteries Includedのモジュールには、あなたが望むことを実行しているように見える機能がoutput_stringあります:http: //ocaml-batteries-team.github.com/batteries-included/hdoc/BatIO.htmloutput_bufferBatIO

入出力タイプを使用する必要がある場合があります。

于 2012-09-22T04:13:08.107 に答える
3

Unixモジュールに依存するテストを気にしない場合はUnix.pipe、ファイル記述子のペアを作成in_channelし、読み取り可能側out_channelから、書き込み可能側からを作成し、書き込み可能側に文字列を書き込んで、に渡すことin_channelができます。テスト中のコード。

val pipe : unit -> file_descr * file_descr

パイプを作成します。結果の最初のコンポーネントは読み取り用に開かれます。これはパイプへの出口です。2番目のコンポーネントは書き込み用に開かれています。これはパイプへの入り口です。

val in_channel_of_descr : file_descr -> Pervasives.in_channel

指定された記述子から読み取り値の入力チャネルを作成します。チャネルは最初はバイナリモードです。テキストモードが必要な場合は、set_binary_mode_inicfalseを使用します。

val out_channel_of_descr : file_descr -> Pervasives.out_channel

指定された記述子に書き込む出力チャネルを作成します。チャネルは最初はバイナリモードです。テキストモードが必要な場合は、set_binary_mode_outocfalseを使用します。

Unixパイプは、スループットの高いものには少し重いですが、テストハーネスには問題ないはずです。

于 2013-12-13T21:17:59.207 に答える