Facebook的流程中的运营商'|>'

Lau*_*ent 3 ocaml

我是ocaml的新手,通过了一些教程,并认为下一步,我会通过阅读一些OOS来熟悉语法.所以我从Facebook 下载了Flow.

但是,我使用"|>"遇到了一些奇怪的语法,我无法弄清楚.

首先我在这里遇到了"|>" :

  args = CommandSpec.ArgSpec.(
    empty
    |> flag "--tokens" no_arg
        ~doc:"Include a list of syntax tokens in the output"
    |> flag "--pretty" no_arg
        ~doc:"Pretty-print JSON output"
    |> CommandUtils.from_flag
    |> anon "file" (optional string) ~doc:"[FILE]"
  )
Run Code Online (Sandbox Code Playgroud)

当我在寻找它的定义时,我在另一个文件中找到了这个:

let (|>) (o : 'a)  (f : 'a -> 'b) : 'b = f o
Run Code Online (Sandbox Code Playgroud)

但我不太清楚它在做什么,或者它是否相关.

你能帮忙吗?

Ewa*_*lor 5

let (|>) (o : 'a)  (f : 'a -> 'b) : 'b = f o
Run Code Online (Sandbox Code Playgroud)

这是声明一个名为中缀的操作符|>,由于名称周围的parens,你知道它是中缀.

它需要两个参数,o具有未知类型'a,并且f是从'a第二个未知类型到第二个未知类型的函数'b.

|>返回类型的东西'b.

结果由计算f o.

换句话说,o |> f就是一样f o.这只是一个肮脏/巧妙的技巧,能够以这种方式在链中编写参数声明,而不必在所有内容周围放置大量括号.运算符的优先级较低,因此它充当每个标志声明之间的分隔符.

  • 中缀是正确的,答案应该是固定的. (2认同)