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



我定义了一个大漂亮的打印机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中没有这样的

最新更新