代码之家  ›  专栏  ›  技术社区  ›  Flux

如何捕获ocaml顶层的js\u标准输出

  •  1
  • Flux  · 技术社区  · 6 年前

    我有一个js\uOcaml代码,它接受一个字符串并执行它(假设字符串是ocaml代码):

    let () = JsooTop.initialize ()
    
    let execute code =
      let code = Js.to_string code in
      let buffer = Buffer.create 100 in
      let formatter = Format.formatter_of_buffer buffer in
      JsooTop.execute true formatter code;
      Js.string (Buffer.contents buffer)
    
    (* Usage: *)
    let () =
        let ret_val_1 = execute "let x = 5;;" in
        let ret_val_2 = execute "print_int (x * x);;" in  (* 25 appears in the browser console. *)
        print_endline ret_val_1;  (* Prints: "val x : int = 5" *)
        print_endline ret_val_2   (* Prints: "- : unit = ()" *)
    

    25 print_int (x * x) 线路。我想使用输出(即。 25 )而不是让它出现在浏览器控制台中。如何捕获由ocaml的js_打印函数生成的标准输出?i、 我怎样才能得到 25 在上面的代码里?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Julien    6 年前

    您可以使用 Sys_js.set_channel_flusher stdout f f

    如果您看一下用Js\u of ocaml发布的顶级示例,他们就是这么做的。格式化程序被插入到虚拟机 /dev/null 他们设置了一个“channelflusher”,将文本附加到一个“output”div,该div封装了一个类为 stdout ,stderr通道刷新器执行相同的操作,但使用类 stderr ,使stderr以红色打印。