2017-10-03 12 views
0

나는 새로운 OCaml의 학습자 해요, 난 제인 스트리트의 Sexplib를 사용하여, 일부 S-표현을 인쇄하기 위해 노력하고있어 :Jane Street의 Sexplib 예쁜 프린터 기능은 어떻게 사용합니까? (코어 포함)

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() 

답변

2

(이 슈퍼 unidiomatic 경우 또한, 행복 듣고, 난 그냥 그것을 잘못하고 있어요) specificator를 사용하여 형식 사양에서 직접 플러시합니다.

형식 라이브러리에는 추가 버퍼링 레이어가 있습니다. 결과적으로 포매터에 대한 인쇄물이 축적되어 특정 조건에서 플러시됩니다. 플러시가 발생하기 전에 데이터는 사양에 따라 포맷 된 다음 모든 데이터가 마지막으로 플러시 된 후 장치로 출력되는지 확인하기 위해 채널에 인쇄됩니다 (자체 기준에 따라 데이터를 플러시 할 수 있음). 채널과 관련되어 있습니다.