我该如何申报管道?

ebb*_*ebb 4 f#

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

let hello name = "Hello " + name + "!"    
let solution1 = hello <| "Homer"
let solution2 = "Homer" |> hello
Run Code Online (Sandbox Code Playgroud)

你会选哪个?solution1或solution2 - 为什么?

Bro*_*ass 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"
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)