Io 在OCaml中,如何创建一个输出通道,将数据写入字符串/缓冲区而不是磁盘上的文件
我有一个Io 在OCaml中,如何创建一个输出通道,将数据写入字符串/缓冲区而不是磁盘上的文件,io,ocaml,Io,Ocaml,我有一个in\u channel->out\u channel->unit类型的函数,它将输出一些东西到out\u channel。现在,我想将其输出作为字符串。创建临时文件来写和读似乎很难看,那么我该怎么做呢?除了pervisives.open\u out系列之外,还有其他方法创建out\u频道吗 实际上,这个函数实现了一个repl。我真正需要的是以编程方式对其进行测试,因此我想首先将其包装为string->string类型的函数。为了创建输入通道,我似乎可以使用Scanf.Scanning.
in\u channel->out\u channel->unit
类型的函数,它将输出一些东西到out\u channel
。现在,我想将其输出作为字符串。创建临时文件来写和读似乎很难看,那么我该怎么做呢?除了pervisives.open\u out
系列之外,还有其他方法创建out\u频道吗
实际上,这个函数实现了一个repl。我真正需要的是以编程方式对其进行测试,因此我想首先将其包装为string->string
类型的函数。为了创建输入通道
,我似乎可以使用Scanf.Scanning.from\u string
,但我不知道如何创建out\u通道
参数。OCaml电池在其BatIO
模块中具有输出字符串
和输出缓冲区
功能,这些功能似乎可以满足您的要求:
它可能需要您使用它们的输入/输出类型。如果您不介意您的测试依赖于Unix
模块,那么您可以使用Unix.pipe
来创建文件描述符对,从可读端创建in\u通道
,从可写端创建out\u通道
,然后将字符串写入可写端,并将\u通道中的传递给被测代码
创建一个管道。结果的第一个组件将为打开
雷丁,那是管道的出口。第二个组成部分是
开放供写作,那是管道的入口
val in_channel_of_descr : file_descr -> Pervasives.in_channel
创建从给定描述符读取的输入通道。这个
信道最初处于二进制模式;在ic中使用set_二进制_模式
如果需要文本模式,则为false
val out_channel_of_descr : file_descr -> Pervasives.out_channel
在给定描述符上创建输出通道写入。这个
信道最初处于二进制模式;使用设置二进制模式输出oc
如果需要文本模式,则为false
val out_channel_of_descr : file_descr -> Pervasives.out_channel
Unix管道对于任何具有高吞吐量的设备来说都有点重,但对于测试线束来说,它们应该是合适的。我认为没有办法做到这一点。这会很棘手,因为字符串在OCaml中有固定的长度。它们不太适合作为存储字符的可扩展位置。您可以使用Printf.sprintf创建一个字符串,该字符串的内容与Printf.fprintf写入输出通道的内容相同。但除此之外,您可能还需要构建自己的机制。对于futur读者,该机制现在位于BatBuffer库中: