什么+>在OCaml意味着什么?

时间:2018-06-14 02:12:26

标签: syntax ocaml

我看到an example of httpaf用法,并且它具有+>类似运算符的语法。这意味着什么?

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运营商列表中找到它。

2 个答案:

答案 0 :(得分:3)

  

不幸的是,我无法在OCaml运营商列表中找到它。

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

答案 1 :(得分:2)

正如杰弗里在评论中解释的那样,它是一个中缀函数。你可以用前缀方式重写它:

empty +> flag "-p" (optional_with_default 80 int) ~doc:"int destination port"
(+>) empty (flag "-p" (optional_with_default 80 int) ~doc:"int destination port")

您可以按照自己的意愿定义甚至重新定义运算符,因为优先级和关联性是从第一个字符继承的,并且使用的字符必须位于该选择列表中:https://caml.inria.fr/pub/docs/manual-ocaml/expr.html < / p>

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

Command.Let_syntax(
let%map_open port = flag "-p" (optional_with_default 80 int) ~doc:"int destination port"
         and host = flag "-h" (required string) ~doc:"string destination host"
in main port host)

在这里阅读更多内容: https://ocaml.janestreet.com/ocaml-core/latest/doc/core/Core/Command/ 那里:https://dev.realworldocaml.org/command-line-parsing.html

我本来可以把它缩短为评论,但我还不能发表评论,对不起,如果我在这个答案中过分了:)