我正在尝试了解ReasonML的FFI(即external
)用法。为此,我整理了以下代码(请参见Try ReasonML和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错误
我们为您找到了一个错误! OCaml预览6:11-18
找不到有价文件
Sketch.sh错误
错误:外部标识符必须是函数
感谢您在回答以下问题方面的帮助:
[@bs.scope]
-这些方式有什么含义(如果有)? -See follow-up question. 答案 0 :(得分:2)
这里有几个不同的问题:
您在最后一行中使用了名为document
的标识符,但尚未定义任何此类标识符。相反,您在JavaScript端分配了名称dom
来引用document
。因此,最后一行应为let tag = dom |> get_by_id("main");
。
不幸的是,这仍然无法在“尝试原因”中运行,因为它在无法访问document
的Web Worker中运行代码。
Sketch.sh不使用BuckleScript,因此不理解BuckleScript FFI注释。但是,您可以使用https://nit.sketch.sh/。