几乎所有扣脚本示例都具有如下语法:
[@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是什么?
答案 0 :(得分:2)
t
是没有定义的类型,称为抽象类型。通常,它在界面中用于隐藏实现,因此,如果不使用特定的关联函数就无法访问和操作它,但实际上根本不需要任何实现。这对于外语互操作尤其有用,因为实现是使用另一种语言进行的。
=
之后的字符串是“外部”函数的名称,因此在这种情况下为JavaScript标识符。因此,make
外部将产生类似require('express').static(...)
的内容,而不是require('express').make(...)
。
parse
外部名称在OCaml和JavaScript中都使用相同的名称,在这种情况下,可以省略外来名称,这就是commander
的作用。通过将其保留为空字符串,可以从外部名称中推断出来。
答案 1 :(得分:0)
最后一个= string
取决于上下文,该上下文由附加外部定义的[@bs.blabla]
设置。
例如,在此片段中:
[@bs.module "express"] external make : (string, options) => t = "static";
因为我们使用的是make
,所以我们正在通过“ express”模块的static
方法创建一个[@bs.module "express"]
函数。
更多信息在这里: https://bucklescript.github.io/docs/en/intro-to-external.html