我定义了一个大漂亮的打印机pp: out_channel -> t -> unit
在一个大字体t
上。因此,我可以像Printf.fprintf stdout "%a" x
一样使用x: t
,或者像Printf.fprintf chan "%a" pp x
一样使用chan: out_channel
。
现在我需要将打印的内容转换为字符串或文本。有人知道是否有一种方法来利用/使用函数pp
,而不是从头开始编写函数to_string: t -> unit
?
Format.asprintf
应该适合您的需要,如果您的pp
是为Format.formatter
类型而不是out_channel
实现的。Format.formatter
是一种更通用的类型,应该优先于具体的out_channel
。事实上,漂亮打印机的一种标准类型是Format.formatter -> 'a -> unit
类型,至少它是OCaml顶层、调试器和其他设施中的#install_printer
指令所要求的。Core
库中使用相同类型的函数实现Pretty_printer
接口。
因此,如果您将重新实现pp
函数以与Format
模块一起工作(通常对于open Format
模块来说这就足够了),那么您可以重用它。输出到out_channel
模块的函数不能被重定向为输出到字符串。所以最好不要写
要做到这一点,您需要在OCaml中看起来像输出通道,但将数据保存在字符串(或缓冲区)中。OCaml中没有这样的