我如何申报管道是否重要?我知道三种方式:
let hello name = "Hello " + name + "!"
let solution1 = hello <| "Homer"
let solution2 = "Homer" |> hello
Run Code Online (Sandbox Code Playgroud)
你会选哪个?solution1或solution2 - 为什么?
如前所述,管道向前运算符|>有助于功能组合和类型推断.它允许您重新排列函数的参数,以便您可以先放置函数的最后一个参数.这使得链接的函数非常易读(类似于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"
Run Code Online (Sandbox Code Playgroud)
管道反向运算符的好处<|是它改变了运算符的优先级,因此它可以为你节省很多括号:函数参数通常从左到右计算, <| 如果你想传递一个结果,你不需要括号函数到另一个函数 - 你的例子并没有真正利用这个.
这些是等价的:
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)
Run Code Online (Sandbox Code Playgroud)