我该如何申报管道?

时间:2011-03-13 15:05:45

标签: f#

我如何声明管道是否重要?我知道三种方式:

let hello name = "Hello " + name + "!"    
let solution1 = hello <| "Homer"
let solution2 = "Homer" |> hello
你会选择哪个? solution1或solution2 - 为什么?

2 个答案:

答案 0 :(得分:7)

如上所述,管道转发运算符|>有助于函数组合和类型推断。它允许您重新排列函数的参数,以便您可以先放置函数的最后一个参数。这使得链接的函数非常易读(类似于C#中的LINQ)。你的例子没有显示出它的强大功能 - 当你为一行中的几个函数设置转换“管道”时,它真的很闪耀。

使用|>链接你可以写:

let createPerson n =
    if n = 1 then "Homer" else "Someone else"

let hello name = "Hello " + name + "!"

let solution2 = 
  1 
  |> createPerson 
  |> hello 
  |> printf "%s"

管道后向运算符<|的好处是它改变了运算符优先级,因此它可以为你节省很多括号:函数参数通常从左到右计算,使用<|你不要如果你想将一个函数的结果传递给另一个函数,则需要括号 - 你的例子并没有真正利用这个。

这些是等价的:

let createPerson n =
    if n = 1 then "Homer" else "Someone else"

let hello name = "Hello " + name + "!"

let solution3 = hello <| createPerson 1
let solution4 = hello (createPerson 1)

答案 1 :(得分:3)

F#从上到下,从左到右读取。出于这个原因,|>运算符的使用远远超过<|,因为它有助于推断类型推断。