2

是否有巧妙的技巧来避免 OCaml 的格式化程序(表单格式)插入换行符(特别是那些来自 的print_break (@ ))标签?

我有一个有点大的软件,它会发出很多消息,我想在它们上使用 Unix 工具,比如grepsed. 但是当格式化程序拆分消息时,插入的换行符会阻止它们工作。代码中有太多的格式化程序,我无法单独跟踪所有这些格式化程序并通过set_margin.

这样一个聪明的技巧可能包括将 Format 包装在另一个模块中,或者最终重新编译 OCaml 本身,如果有一个可以将默认边距设置为 9999 之类的中心点。我尝试了一些实验,例如在调用Format.set_marginmain 之后调用,但它似乎不适用于程序创建的格式化程序。

4

2 回答 2

1

你可以试试

let out,flush,_,spaces = get_all_formatter_output_functions ()
in set_all_formatter_output_functions out flush (fun () -> out " " 0 1) spaces

如果成功,它将打印空格而不是换行符。

于 2013-01-15T18:55:13.797 回答
0

如果您不害怕残酷的解决方案:

find . -type f -regex ".+\\.ml" -exec sed -i 's/Format/MyFormat/g' {} \;

和 myFormat 文件可以是

include Format
let formatter_of_out_channel c =
  let f = formatter_of_out_channel c in
  pp_set_margin f 9999;
  f

formatter_of_buffer并且您为and添加相同的内容make_formatter

于 2013-01-17T10:11:29.280 回答