包装一个 returns 一条记录的 OCaml 函数

Wrap an OCaml function that returns a record

我定义了一个 OCaml 函数 manipulate: string -> string。我把它包装成一个 JS 函数 jsManipulate:

let () =
  Js.Unsafe.global##.jsManipulate := Js.wrap_callback
      (fun s -> Js.string (manipulate (Js.to_string s)))

现在,我想让 manipulate return 的信息不仅仅是一个字符串;我想要它 return 一条记录:manipulate: string -> myrecord 其中 myrecord = { result: string; info_1: int; info_2: bool } OCaml 格式。

在这种情况下,有谁知道如何包装 manipulate 以创建一个 JS 函数,该函数 return 也是来自 JS 字符串的 JS 记录(或对象?)?

PS: 我只想调用 manipulate 一次(而不是 3 次)来构建 JS 对象。

常规 javascript 无法理解 OCaml 的记录,即使代码在 javascript 中编译为 js_of_ocaml。

您应该使用 javascript 对象(javascript 中的记录和对象没有区别)。您可以在本页底部阅读有关创建文字对象的信息:http://ocsigen.org/js_of_ocaml/2.7/api/Ppx_js

您可以创建 myrecord -> < .. > Js.t 类型的函数 to_object,returns 一个对象。然后你可以用它来代替 Js.to_string.