【问题标题】:Using ReasonML FFI使用 ReasonML FFI
【发布时间】:2019-11-22 19:12:42
【问题描述】:

我正在尝试了解 ReasonML 的 FFI(即external)的用法。为此,我整理了以下代码(参见Try ReasonMLSketch.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 错误

错误:外部标识符必须是函数

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

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

【问题讨论】:

  • 我已经回答了下面的第一个问题。但是您不应该在一篇文章中提出多个问题。见How to Ask。我建议您将第二个问题作为单独的帖子发布,在其中展示具体示例,这样我们也不必猜测您指的是什么。
  • 还不错;我最初包括了这两个问题,因为我相信这两个问题是有意义的。更新了原始帖子以链接到后续问题。

标签: ffi reason bucklescript


【解决方案1】:

这里有几个不同的问题:

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

  2. 不幸的是,这仍然无法在“Try Reason”中运行,因为它在无权访问 document 的 Web Worker 中运行代码。

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

【讨论】:

    猜你喜欢
    • 2018-10-04
    • 2018-07-27
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多