Facebook Flow 中的运算符“|>”

Operator '|>' in facebook's Flow

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

但是,我 运行 使用了一些我无法理解的“|>”的奇怪语法。

第一次遇到“|>”here:

  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]"
  )

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

let (|>) (o : 'a)  (f : 'a -> 'b) : 'b = f o

但我不太确定它在做什么,或者它是否相关。

你能帮忙吗?

let (|>) (o : 'a)  (f : 'a -> 'b) : 'b = f o

这是在声明一个名为 |> 的中缀运算符,您知道它是中缀,因为名称周围有括号。

它有两个参数,o 具有未知类型 'af 是从 'a 到第二个未知类型 [=16= 的函数].

|> returns 类型 'b.

结果由f o计算得出。

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

这是一个(前向)管道运算符。

而不是调用以下形式的函数:

f arg

管道运算符允许您调用它:

arg |> f

这使得链接函数调用更易于读写。

arg |> f |> g |> h

h (g (f arg))

是管道运算符 它允许很容易地应用一系列功能: f(g(h x)) 可以写成 x |> h |> g |> f.

它的声明使用括号表示它是一个中缀运算符: x |> f 表示 f x.