F# 我应该如何申报管道?

F# 我应该如何申报管道?,f#,F#,我如何声明管道重要吗?我知道三种方法: let hello name = "Hello " + name + "!" let solution1 = hello <| "Homer" let solution2 = "Homer" |> hello 让hello name=“hello”+name+!” 让solution1=您好 你会选择哪一个?解决方案1或解决方案2——为什么?F#从上到下、从左到右读取。由于这个原因,|>操作符的使用比前面提到的要多得多,管道向前操作

我如何声明管道重要吗?我知道三种方法:

let hello name = "Hello " + name + "!"    
let solution1 = hello <| "Homer"
let solution2 = "Homer" |> hello
让hello name=“hello”+name+!”
让solution1=您好

你会选择哪一个?解决方案1或解决方案2——为什么?

F#从上到下、从左到右读取。由于这个原因,
|>
操作符的使用比前面提到的
要多得多,管道向前操作符
|>
有助于函数组合和类型推断。它允许您重新排列函数的参数,以便可以将函数的最后一个参数放在第一位。这使得函数的链接非常可读(类似于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"

管道反向操作符
@J Cooper的好处是——我想,在某些情况下,
您有时可以使用它来避免使用括号,比如在
中,如果不是,我更喜欢使用
raise-raise
,但也可以使用
让solution5=createPerson 1 |>hello
?@ebb:一个更好的例子是
1 |>createPerson |>hello
——你的例子也很有效,但这仅仅是因为
1
是一个恒常的例子。这不起作用-您需要再次使用括号
let solution5=createPerson 2-1 |>hello
而不是
let solution5=createPerson(2-1)|>hello
工作-您不需要带链接的括号(即在修订后的解决方案2中)。我也不是这方面的专家,我在学习自己-让我们多了解一些信息。啊,我明白了:)-但是。。。您更喜欢
let solution5=2-1 |>createPerson |>hello
let solution5=createPerson 2-1 |>hello
中的哪一个?
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)