代码之家  ›  专栏  ›  技术社区  ›  Mark Pearl

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

f#
  •  9
  • Mark Pearl  · 技术社区  · 16 年前

    一个真正的F noob问题,但它的调用是什么,它做什么?

    4 回复  |  直到 16 年前
        1
  •  12
  •   LBushkin    16 年前

    它被称为 forward pipe operator . 它将一个函数的结果传输到另一个函数。

    前管道操作员的简单定义如下:

    let (|>) x f = f x
    

    并具有类型签名:

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

    它解析为:给定一个泛型类型“a”,以及一个接受“a”并返回“b”的函数,然后返回该函数在输入上的应用程序。

    您可以阅读有关它在 article here .

        2
  •  8
  •   Tomas Petricek    16 年前

    我通常指 |> 作为 管道操作员 但是我不知道官方的名字是不是 管道操作员 管道操作员 (尽管这可能并不真正重要,因为名称的相似性足以避免混淆:-)。

    @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 ,从而可以使用 和gt; .

    最后,我觉得很有趣的是 管道操作员 在许多情况下,对应于从面向对象语言链接方法。例如,前一个列表处理示例在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中的许多其他情况中使用)。

        3
  •  3
  •   James Moore    16 年前

    就F本身而言,它的名字是Op-Piperight(尽管没有人会这么称呼它)。我把它发音为“pipe”,就像unix shell pipe一样。

    这个规范对于解决这类问题很有用。第4.1节有操作员姓名。

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

        4
  •  2
  •   Brian    16 年前

    别忘了查看图书馆参考文档:

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

    其中列出了运算符。