Как мне использовать функции симпатичного принтера Sexplib Джейн Стрит?
Я новый ученик OCaml, и я пытаюсь напечатать некоторые S-выражения, используя Sexplib Джейн Стрит (входит в состав Core):
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 ценится! (Кроме того, рад слышать, если это супер-unidiomatic, и я просто делаю это неправильно)
1 ответ
Вам нужно очистить форматер, например,
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 ()
Кроме того, вы можете использовать %!
Спецификатор формата для сброса непосредственно в спецификации формата.
С библиотекой формата у нас есть дополнительный уровень буферизации. Последующие отпечатки в форматтер накапливаются в нем и стираются при определенных условиях. Перед сбросом данные форматируются в соответствии со спецификацией, затем они печатаются в канал (который может сбрасывать данные на основе собственных критериев), после того, как все записанные данные окончательно сбрасываются, чтобы убедиться, что все выводится на устройство., связанные с каналом.