我看到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运营商列表中找到它。
答案 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
我本来可以把它缩短为评论,但我还不能发表评论,对不起,如果我在这个答案中过分了:)