我是一个新的Ocaml-Learner,我正在尝试使用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 ()
另外,您可以使用%!
格式指定器直接在格式规范中刷新。
使用格式库,我们有额外的缓冲层。因此,在其中积累了格式化器的印刷品,并在某些条件下被冲洗。在潮红发生之前,根据规范对数据进行格式化,然后将其打印到频道中(可能会根据其自身标准进行冲洗数据),在所有内容最终被填充后,以确保所有内容都将所有内容输出到设备中,与通道关联。