Ocaml 理解ReasonML/Bucklescript外部
只是想大致了解这里发生了什么。将reasonApollTypes.gql解释为使用Externals的示例是否有意义 这是bs.module代码Ocaml 理解ReasonML/Bucklescript外部,ocaml,external,ffi,bucklescript,reason-react,Ocaml,External,Ffi,Bucklescript,Reason React,只是想大致了解这里发生了什么。将reasonApollTypes.gql解释为使用Externals的示例是否有意义 这是bs.module代码 [@bs.module]外部gql:ReasonApolloTypes.gql=“graphql标签” module告诉buckelscript我们要使用FFI external告诉bs我们要使用的FII的名称,并将其值设置为ReasonApolloTypes.gql,这是一个全局可用的原因模块,我们在bsconfig的bs dependencies数
[@bs.module]外部gql:ReasonApolloTypes.gql=“graphql标签”代码>
module告诉buckelscript我们要使用FFI
external
告诉bs
我们要使用的FII的名称,并将其值设置为ReasonApolloTypes.gql,这是一个全局可用的原因模块,我们在bsconfig的bs dependencies数组中添加Reason apollo时安装了该模块,并将其设置为package.json。如果打开node_modules/reason apollo/src,您将看到定义的reason模块,这些模块与任何其他模块一样全局可用
ReasonApolloTypes.re在此处列出,并包含一个名为gql的已定义类型。因此,ReasonApolloType.gql是我们使用external gql
访问的命名模块。在ReasonApolloType.gql中有一个定义的类型,typegql=[@bs](string=>queryString)代码>。这个叫巴克莱脚本
将字符串类型指定给gql类型,并将值指定给querystring,因此type querystring
是string类型。然后设置ReasonApolloTypes.gql以使用“graphql标记”节点库解析ReasonApolloTypes.gql
我是不是遗漏了一个概念?这个表达正确吗?Bucklescript/Reason文档在这一点上超出了我对外部的理解。谢谢。这个问题在这样的情况下确实不太合适(请参阅),也许应该在不和谐的情况下提出。但这意味着:
external
告诉编译器我们正在定义“外部”的东西,即我们想要使用FFI
[@bs.module]
告诉BuckleScript我们所引用的是一个模块,当它被使用时,它需要发出require
调用
gql
是我们将用于在原因端引用它的名称
:
表示我们正在指定外部文件的类型<代码>推理类型。gql
是在推理类型
模块中定义的类型
=“graphql标记”
告诉编译器我们所引用的东西在JavaScript端被命名为graphql标记
此外,typegql=[@bs](string=>queryString)
指定它是一个从string
到queryString
的函数,[@bs]
表示调用此函数时应使用无载波调用约定
因此,在ML端,gql
是一个函数,它接受字符串
,并返回查询字符串
。调用时:
let qs = [@bs] gql("some string"); /* [@bs] because it's uncurried */
BuckleScript将生成如下内容:
var qs = require("graphql-tag")("some string");
附言:总的来说,我建议你从更简单的事情开始,试图理解外国金融机构的体系。试图同时理解每一件事会造成一个非常陡峭的学习曲线,并大大增加小误会的成本,因为这些误会往往会积累起来。这个问题在这方面确实不太合适(请参见),也许应该在不和谐的情况下提出。但这意味着:
external
告诉编译器我们正在定义“外部”的东西,即我们想要使用FFI
[@bs.module]
告诉BuckleScript我们所引用的是一个模块,当它被使用时,它需要发出require
调用
gql
是我们将用于在原因端引用它的名称
:
表示我们正在指定外部文件的类型<代码>推理类型。gql
是在推理类型
模块中定义的类型
=“graphql标记”
告诉编译器我们所引用的东西在JavaScript端被命名为graphql标记
typegql=[@bs](string=>queryString)
指定它是一个从string
到queryString
的函数,[@bs]
表示调用此函数时应使用无载波调用约定
因此,在ML端,gql
是一个函数,它接受字符串
,并返回查询字符串
。调用时:
let qs = [@bs] gql("some string"); /* [@bs] because it's uncurried */
BuckleScript将生成如下内容:
var qs = require("graphql-tag")("some string");
附言:总的来说,我建议你从更简单的事情开始,试图理解外国金融机构的体系。试图同时理解每一件事会造成一个非常陡峭的学习曲线,并大大增加小误会的成本,因为它们往往会累积。太棒了,回答。应该有人把它链接到bucklescript文档上。一点点地学习外国金融机构是什么样子的?我看过bs文档,做了每个例子。我认为对我来说,问题在于它们脱离了上下文,所以即使你运行了这个示例,你也可能看不到如何在上下文中使用它。谢谢你的回答。我想这对很多人来说都很有用,这就是我为什么把它贴在这里的原因。它们的顺序有关系吗?我在声明末尾看到了[@bs.module]。我已经看到[@bs.module somemoduleName].OCaml和旧的原因语法在最后使用了它们。新的语法在开头有它们。因此,从这个意义上讲,这取决于您正在阅读的语法。我建议在您编写的代码旁边打开生成的javascript代码。喜欢上了。从最简单的绑定开始(例如,从一个绑定开始),试着使用它,看看另一面会出现什么。然后逐渐使它更复杂。例如,将
[@bs.module]
添加到它,或者尝试让它接受一个带有和不带@bs]
的函数类型。太棒了,回答。应该有人把它链接到bucklescript文档上。一点点地学习外国金融机构是什么样子的?我看过bs文档,做了每个例子。我不能