我如何声明管道是否重要?我知道三种方式:
let hello name = "Hello " + name + "!"
let solution1 = hello <| "Homer"
let solution2 = "Homer" |> hello
你会选择哪个? solution1或solution2 - 为什么?
答案 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#从上到下,从左到右读取。出于这个原因,|>
运算符的使用远远超过<|
,因为它有助于推断类型推断。