使用 ReasonML FFI

Using ReasonML FFI

我正在尝试了解 ReasonML 的 FFI(即 external)用法。为此,我整理了以下代码(参见 Try ReasonML and Sketch.sh

type dom;
type element;
[@bs.val] 
external dom: dom = "document";
[@bs.send.pipe : dom]
external get_by_id: string => element = "getElementById";
let tag = document |> get_by_id("main");

但是,代码当前失败并出现以下错误:

尝试 ReasonML 错误

We've found a bug for you! OCaml preview 6:11-18

The value document can't be found

Sketch.sh 错误

Error: External identifiers must be functions

希望能帮助您回答以下问题:

  1. 上面的代码有什么问题?
  2. 我相信有多种方法可以配置上面的 FFI,例如使用 [@bs.scope] - 如果有的话,这些方式有什么影响? --

这里有几个不同的问题:

  1. 您在最后一行使用了名为 document 的标识符,但尚未定义任何此类标识符。相反,您已将名称 dom 分配给 JavaScript 端的引用 document。因此,最后一行应该是 let tag = dom |> get_by_id("main");.

  2. 不幸的是,这在 "Try Reason" 中仍然不起作用,因为它在无法访问 document.[=16= 的 Web Worker 中运行代码]

  3. Sketch.sh 不使用 BuckleScript,因此不理解 BuckleScript FFI 注释。但是,您可以使用 https://nit.sketch.sh/,它确实有效。