我如何使用 Jane Street 的 Sexplib 的漂亮打印机功能?
How do I use Jane Street's Sexplib's pretty-printer functions?
我是 OCaml 新手,我正在尝试使用 Jane Street 的 Sexplib(包含在核心中)打印一些 S 表达式:
let rec print_source ?(channel = stdout) sexps =
let formatter = Format.formatter_of_out_channel channel in
Sexp.pp_hum formatter |> List.iter sexps
但是,这似乎没有向 stdout
输出任何内容。如果我用不使用格式的版本替换它,它工作正常:
let rec print_source ?(channel = stdout) sexps =
Sexp.output_hum channel |> List.iter sexps
感谢任何 OCaml 专业知识! (另外,很高兴听到这是否是超级单一的,我只是做错了)
您需要刷新格式化程序,例如,
let rec print_source ?(channel = stdout) sexps =
let formatter = Format.formatter_of_out_channel channel in
Sexp.pp_hum formatter |> List.iter sexps;
Format.pp_print_flush formatter ()
或者,您可以使用 %!
格式规范直接刷新您的格式规范。
有了 Format 库,我们就有了一层额外的缓冲。格式化程序的后续打印在其中累积,并在特定条件下被刷新。在flushing发生之前,数据按照规范进行格式化,然后打印到channel中(可能会根据自己的标准flush data),写完数据最后flush,以确保所有内容都输出到设备中, 与频道相关联。
我是 OCaml 新手,我正在尝试使用 Jane Street 的 Sexplib(包含在核心中)打印一些 S 表达式:
let rec print_source ?(channel = stdout) sexps =
let formatter = Format.formatter_of_out_channel channel in
Sexp.pp_hum formatter |> List.iter sexps
但是,这似乎没有向 stdout
输出任何内容。如果我用不使用格式的版本替换它,它工作正常:
let rec print_source ?(channel = stdout) sexps =
Sexp.output_hum channel |> List.iter sexps
感谢任何 OCaml 专业知识! (另外,很高兴听到这是否是超级单一的,我只是做错了)
您需要刷新格式化程序,例如,
let rec print_source ?(channel = stdout) sexps =
let formatter = Format.formatter_of_out_channel channel in
Sexp.pp_hum formatter |> List.iter sexps;
Format.pp_print_flush formatter ()
或者,您可以使用 %!
格式规范直接刷新您的格式规范。
有了 Format 库,我们就有了一层额外的缓冲。格式化程序的后续打印在其中累积,并在特定条件下被刷新。在flushing发生之前,数据按照规范进行格式化,然后打印到channel中(可能会根据自己的标准flush data),写完数据最后flush,以确保所有内容都输出到设备中, 与频道相关联。