LBu*_*kin 12
它被称为前向管道操作员.它将一个函数的结果传递给另一个函数.
Forward管道运算符简单地定义为:
let (|>) x f = f x
Run Code Online (Sandbox Code Playgroud)
并有一个类型签名:
'a -> ('a -> 'b) -> 'b
Run Code Online (Sandbox Code Playgroud)
解析为:给定泛型类型'a,以及带'a并返回'b的函数,然后在输入上返回函数的应用程序.
我通常|>称为流水线操作符,但我不确定官方名称是管道操作符还是流水线操作符(尽管它可能并不重要,因为名称相似,足以避免混淆:-)).
@LBushkin已经给出了一个很好的答案,所以我只想添加一些可能也很有趣的观察结果.显然,流水线操作员得到了它的名字,因为它可以用于创建一个管道,通过几个步骤处理一些数据.典型用法是使用列表时:
[0 .. 10]
|> List.filter (fun n -> n % 3 = 0) // Get numbers divisible by three
|> List.map (fun n -> n * n) // Calculate squared of such numbers
Run Code Online (Sandbox Code Playgroud)
这给出了结果[0; 9; 36; 81].此外,运算符是左关联的,这意味着表达式input |> f |> g被解释为(input |> f) |> g,这使得可以使用排序多个操作|>.
最后,我发现很有意思的是,在许多情况下,流水线操作符对应于来自面向对象语言的方法链接.例如,之前的列表处理示例在C#中看起来像这样:
Enumerable.Range(0, 10)
.Where(n => n % 3 == 0) // Get numbers divisible by three
.Select(n => n * n) // Calculate squared of such numbers
Run Code Online (Sandbox Code Playgroud)
如果您从面向对象的背景中进行操作(虽然它在F#中的许多其他情况下使用),这可能会让您了解何时可以使用运算符.