Syntax 什么是+&燃气轮机;用OCaml是什么意思?

Syntax 什么是+&燃气轮机;用OCaml是什么意思?,syntax,ocaml,Syntax,Ocaml,我看到了用法,它有+>运算符式语法。这意味着什么 let () = Command.async_spec ~summary:"Start a hello world Async server" Command.Spec.(empty +> flag "-p" (optional_with_default 80 int) ~doc:"int destination port" +> flag "-h" (requi

我看到了用法,它有
+>
运算符式语法。这意味着什么

let () =
  Command.async_spec
    ~summary:"Start a hello world Async server"
    Command.Spec.(empty +>
      flag "-p" (optional_with_default 80 int)
        ~doc:"int destination port"
      +>
      flag "-h" (required string)
        ~doc:"string destination host"
    ) main
|> Command.run

不幸的是,我在OCaml操作符列表中找不到它。

正如Jeffrey在评论中解释的,它是一个中缀函数。您可以用前缀方式重写它:

empty+>标志“-p”(可选,默认值为80 int)~doc:“int目标端口”
(++)空(标志“-p”(可选,默认值为80 int)~doc:“int目标端口”)
只要运算符遵循某些规则,就可以根据需要定义或甚至重新定义运算符,因为优先级和关联性是从第一个字符继承的,并且使用的字符必须在该选择列表中:

但是,请注意,如果您对此处使用的模块感兴趣,
Command.Spec
已被弃用,并且新语法与此完全不同:

Command.Let\u语法(
让%map\u open port=flag“-p”(可选,默认值为80 int)~doc:“int目标端口”
并且主机=标志“-h”(必需字符串)~doc:“字符串目标主机”
在主端口(主机中)
请在此处阅读更多信息: 在那里:


我本可以把它缩短为一个注释,但我现在还不能评论,如果我在这个回答中做得太过火了,很抱歉:)

正如Jeffrey在注释中解释的,它是一个中缀函数。您可以用前缀方式重写它:

empty+>标志“-p”(可选,默认值为80 int)~doc:“int目标端口”
(++)空(标志“-p”(可选,默认值为80 int)~doc:“int目标端口”)
只要运算符遵循某些规则,就可以根据需要定义或甚至重新定义运算符,因为优先级和关联性是从第一个字符继承的,并且使用的字符必须在该选择列表中:

但是,请注意,如果您对此处使用的模块感兴趣,
Command.Spec
已被弃用,并且新语法与此完全不同:

Command.Let\u语法(
让%map\u open port=flag“-p”(可选,默认值为80 int)~doc:“int目标端口”
并且主机=标志“-h”(必需字符串)~doc:“字符串目标主机”
在主端口(主机中)
请在此处阅读更多信息: 在那里:

我本可以把这个缩短作为一个评论,但我现在还不能评论,如果我在这个回答中做得太过火了,很抱歉:)

不幸的是,我在OCaml操作符列表中找不到它

这是因为它不是由语言定义的,而是由库定义的运算符。OCaml允许通过用户代码定义运算符。您需要查阅定义运算符的库的文档,以了解它的功能

不幸的是,我在OCaml操作符列表中找不到它


这是因为它不是由语言定义的,而是由库定义的运算符。OCaml允许通过用户代码定义运算符。您需要查阅定义运算符的库的文档,以了解它的功能。

这是OCaml中的一元接口,模块可以定义使用运算符语法的函数。代码上写着
openasync
,因此异步模块的操作符被纳入范围。(所以它们看起来像该语言的任何其他运算符。)我明白了,所以命令模块中的自定义函数类似于运算符。谢谢它是OCaml中的一元接口,模块可以定义使用运算符语法的函数。代码上写着
openasync
,因此异步模块的操作符被纳入范围。(所以它们看起来像该语言的任何其他运算符。)我明白了,所以命令模块中的自定义函数类似于运算符。谢谢