Format模块用于对漂亮的打印机进行建模并将其与语法扩展相结合,该语法扩展允许键入格式,并且在编写代码生成器或数据结构打印机之类的东西时会很有帮助。
但是,78 columns的限制是在格式化程序的空白处初始化的,它将超出此限制的任何内容向左拉。
我正在使用Yojson.Basic.json
模块来打印Format
程序的较轻版本,但是当输入太大时,输出将折叠,而实际上并不是“漂亮”。 / p>
我一直试图超过此限制并将其配置为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 ()
如何配置更大的限制?
答案 0 :(得分:2)
问题是margin
和max_indent
的值被隐式约束到圆锥体1 < max_indent < margin
,函数set_max_indent
默默地失败,并且如果没有此约束,则不执行任何操作受到尊重。
为避免此问题,在OCaml≥4.08中,可以使用新的set_geometry
函数,该函数要求同时设置两个值,并且如果所需的max_indent
大于边距。
否则,您应始终同时设置两个值,并始终按顺序设置
首先是margin
,然后是max_indent
。如果您不知道为max_indent
选择哪个值,通常选择margin - 10
。