什么是|>的名称在F#中,它做了什么?

时间:2010-04-13 15:38:30

标签: f#

一个真正的F#noob问题,但是什么是|>被叫,它做了什么?

4 个答案:

答案 0 :(得分:12)

它被称为forward pipe operator。它将一个函数的结果传递给另一个函数。

Forward管道运算符简单定义为:

let (|>) x f = f x

并且有一个类型签名:

'a -> ('a -> 'b) -> 'b

解析为:给定泛型类型'a,以及带'a并返回'b的函数,然后在输入上返回函数的应用程序。

您可以在article here中阅读有关其工作原理的更多详细信息。

答案 1 :(得分:8)

我通常将|>称为管道运算符,但我不确定正式名称是管道运算符还是管道运算符(虽然它可能并不重要,因为名称足够相似以避免混淆: - ))。

@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

这给出了结果[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

如果您从面向对象的背景中进行操作(虽然它在F#中的许多其他情况下使用),这可能会让您了解何时可以使用运算符。

答案 2 :(得分:3)

就F#本身而言,名称是op_PipeRight(虽然没有人称之为)。我把它称为“管道”,就像unix shell管道一样。

该规范对于搞清楚这些事情非常有用。 4.1节有运营商名称。

http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/spec.html

答案 3 :(得分:2)

不要忘记查看图书馆参考文档:

http://msdn.microsoft.com/en-us/library/ee353754(v=VS.100).aspx

列出了运营商。