运营商'|>'在facebook的流程中

时间:2015-12-05 20:21:51

标签: ocaml

我是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

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

你能帮帮忙吗?

3 个答案:

答案 0 :(得分:5)

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

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

它需要两个参数,o具有未知类型'af是一个函数,从'a到第二个未知类型'b

|>会返回'b类型的内容。

结果由f o计算。

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

答案 1 :(得分:3)

它是(前进)管道操作员。

而不是在表单中调用函数:

f arg

管道操作符允许您将其作为:

调用
arg |> f

这使得链接函数调用对读取和写入都更加容易。

arg |> f |> g |> h

VS

h (g (f arg))

答案 2 :(得分:1)

是管道运营商 它允许很容易地应用一系列函数: f(g(h x))可以写成x |> h |> g |> F。

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