-1

几乎所有的 bucklescript 示例都有这样的语法:

[@bs.send.pipe : t('options)] external parse : array(string) => 'options = "parse";

或像这样:

[@bs.module "express"] external make : (string, options) => t = "static";

我见过的最简单的例子是在这个教程中:https ://medium.com/@Hehk/binding-a-library-in-reasonml-e33b6a58b1b3

type t;

[@bs.module] external commander : t = "";

最后一个= string代表什么?在这种情况下,类型 t 是什么?

4

2 回答 2

2

t是没有定义的类型,称为抽象类型。通常在接口中使用它来隐藏实现,这样你就无法在不使用特定关联函数的情况下访问和操作它,但它实际上根本不需要任何实现。这对于外语互操作特别有用,因为实现是不同的语言。

后面的字符串=是“外部”函数的名称,因此在这种情况下是 JavaScript 标识符。因此,make外部将产生类似的东西,require('express').static(...)而不是require('express').make(...).

外部在 OCaml 和 JavaScript 中使用相同的parse名称,在这种情况下可以省略外部名称,这就是这样commander做的。通过将其保留为空字符串,它将从外部名称中推断出来。

于 2018-06-25T02:56:14.380 回答
0

最后一个= string取决于上下文,该上下文由[@bs.blabla]添加外部定义的 设置。

例如,在这个片段中:

[@bs.module "express"] external make : (string, options) => t = "static";

我们正在从“express”模块的方法创建一个make函数,因为我们正在使用.static[@bs.module "express"]

更多信息在这里: https ://bucklescript.github.io/docs/en/intro-to-external.html

于 2018-06-25T03:07:14.800 回答