我是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
但我不太清楚它在做什么,或者它是否相关。
你能帮帮忙吗?答案 0 :(得分:5)
let (|>) (o : 'a) (f : 'a -> 'b) : 'b = f o
这是声明一个名为|>
的中缀运算符,由于名称周围的parens,你知道它是中缀。
它需要两个参数,o
具有未知类型'a
,f
是一个函数,从'a
到第二个未知类型'b
。
|>
会返回'b
类型的内容。
结果由f o
计算。
换句话说,o |> f
与f 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。