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
具有未知类型 'a
,f
是从 'a
到第二个未知类型 [=16= 的函数].
|>
returns 类型 'b
.
结果由f o
计算得出。
换句话说,o |> f
与f 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.
我是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
具有未知类型 'a
,f
是从 'a
到第二个未知类型 [=16= 的函数].
|>
returns 类型 'b
.
结果由f o
计算得出。
换句话说,o |> f
与f 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.