Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ocaml 理解ReasonML/Bucklescript外部_Ocaml_External_Ffi_Bucklescript_Reason React - Fatal编程技术网

Ocaml 理解ReasonML/Bucklescript外部

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数

只是想大致了解这里发生了什么。将reasonApollTypes.gql解释为使用Externals的示例是否有意义

这是bs.module代码

[@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文档,做了每个例子。我不能