只是想大致了解这是怎么回事。将ReasonApolloTypes.gql解释为使用外部元素的示例是否有意义。
这是bs.module代码
[@bs.module] external gql : ReasonApolloTypes.gql = "graphql-tag";
bs.module告诉buckelscript我们想要使用FFI。
external告诉bs我们想要使用的FII的名称,我们将它的值设置为ReasonApolloTypes.gql,这是一个全局可用的原因模块,我们在bsconfig的bs-依赖关系数组中添加了理由--阿波罗,并添加到package.json。如果您打开节点_模块/原因-阿波罗/src,您将看到与任何其他模块一样全局可用的已定义的原因模块。
其中列出了ReasonApolloTypes.re,并包含一个名为gql的定义类型。因此,ReasonApolloType.gql是我们使用external gql访问的命名模块。在ReasonApolloType.gql中有一个定义的类型,type gql = [@bs] (string => queryString);。这将告诉bucklescript将字符串类型分配给gql类型,并将值赋给querystring,因此type querystring是string类型。然后将ReasonApolloTypes.gql设置为使用“graphql”节点库来解析ReasonApolloTypes.gql。
我是不是漏掉了一个概念?这个表达正确吗?在这一点上,巴克抄本/理由文档就在我的头上。谢谢。
发布于 2017-11-12 12:38:51
这个问题在SO上确实不太合适(参见what's on-topic here),也许应该在不和谐的情况下提出这个问题。但它的意思是:
external告诉编译器我们正在定义“外部”的东西,即。我们想要使用FFI。[@bs.module]告诉BuckleScript,我们所引用的是一个模块,当它被使用时,它需要发出require调用。gql是我们将要使用的名称,用于在原因方面引用它。:意味着我们指定了外部的类型。ReasonApolloTypes.gql是在ReasonApolloTypes模块中定义的类型。= "graphql-tag"告诉编译器,我们所引用的是JavaScript端的graphql-tag。此外,type gql = [@bs] (string => queryString);指定它是一个从string到queryString的函数,[@bs]意味着它在调用该函数时应该使用未处理的调用约定。
因此,在ML方面,gql是一个接受string并返回queryString的函数。当被召唤时:
let qs = [@bs] gql("some string"); /* [@bs] because it's uncurried */BuckleScript将生成如下内容:
var qs = require("graphql-tag")("some string");PS:一般说来,我建议你从更简单的东西开始,试着理解FFI系统。试图同时理解每一件事会产生一个非常陡峭的学习曲线,并且会大大增加小误解的成本,因为它们往往会累积起来。
https://stackoverflow.com/questions/47248519
复制相似问题