格式模块
Format模块用于对 pretty-print 进行建模并将其与允许类型化格式的语法扩展相结合,当您编写代码生成器或数据结构打印机之类的东西时,它会很有帮助。
问题
但是,限制为 78 columns它在格式化程序的边缘初始化,并将向左拉动任何超出此限制的内容。
我正在使用 Format
模块打印 Yojson.Basic.json
程序的轻量版本,但是当输入太大时,输出会折叠,这并不是真正的“漂亮”。
预览
我一直在尝试超越此限制并将其配置为 120 列,但没有取得任何成功。
我尝试了什么?
- 使用
Format.pp_set_margin ppf 120
重新配置 - 使用
Format.pp_set_max_indent
获得更大的值
但它们似乎没有任何效果,并且没有关于此限制的容易获得的文档。我只是通过阅读源代码才发现它的。
我在做什么?
let string_of_cst program =
let ppf = Format.str_formatter in
(* I've enabled colors. *)
Format.pp_set_tags ppf colors;
Format.pp_set_formatter_tag_functions ppf with_colors;
(* [print_json] is my printer. *)
print_json ppf program;
(* Get string out of printer. *)
Format.flush_str_formatter ()
如何配置更大的限制?
最佳答案
问题是 margin
的值和max_indent
隐含地约束在圆锥 1 < max_indent < margin
和函数 set_max_indent
如果不遵守此约束,则默默地失败并且不执行任何操作。
为了避免这个问题,在 OCaml ≥4.08 中,可以使用新的 set_geometry
需要同时设置两个值的函数,如果需要max_indent
则失败并出现异常大于边距。
否则,您应该始终同时设置这两个值,并且始终按顺序设置
margin
首先,和max_indent
第二。如果您不知道选择哪个值 max_indent
, margin - 10
通常是一个不错的选择。
关于format - 在格式模块上配置更大的列数限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53593378/