我是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]" )
当我在寻找它的定义时,我在另一个文件中找到了这个:
let (|>) (o : 'a) (f : 'a -> 'b) : 'b = f o
但我不太清楚它在做什么,或者它是否相关.
你能帮忙吗?
let (|>) (o : 'a) (f : 'a -> 'b) : 'b = f o
这是声明一个名为中缀的操作符|>
,由于名称周围的parens,你知道它是中缀.
它需要两个参数,o
具有未知类型'a
,并且f
是从'a
第二个未知类型到第二个未知类型的函数'b
.
|>
返回类型的东西'b
.
结果由计算f o
.
换句话说,o |> f
就是一样f o
.这只是一个肮脏/巧妙的技巧,能够以这种方式在链中编写参数声明,而不必在所有内容周围放置大量括号.运算符的优先级较低,因此它充当每个标志声明之间的分隔符.