使用漂亮的打印机编写to_string函数

时间:2016-10-24 20:08:10

标签: ocaml tostring pretty-print

我在一个大型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

2 个答案:

答案 0 :(得分:2)

如果您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模块的函数无法重新定位以打印到字符串中。所以最好不要写它们。

答案 1 :(得分:0)

为了完成这项工作,你需要一些看起来像OCaml的东西,就像一个out通道,但是将数据保存在字符串(或缓冲区)中。不幸的是,在OCaml中没有这样的事情。