当将一个函数传递给另一个应该计算结果的函数,然后将该值作为参数传递给另一个函数时,我发现我可以用 5 种不同的方式“组合”以下代码。
let testnum testFun =
testFun 4
printfn "result: %b" (testnum (=) 0)
printfn "result: %b" <| testnum (<) 0
printfn "result: %b" (testnum <| (>=) 0)
testnum <| (=) 0 |> printfn "result: %b"
printfn "resutl: %b" << testnum <| (<>) 0
我确实更喜欢不带括号的样式,但现在我想知道,如果我的目标是代码的可读性 和可支持性,是否有首选样式? p>
对于你的例子,我会选择第一个:
printfn "result: %b" (testnum (=) 0)
第二个还过得去:
printfn "result: %b" <| testnum (<) 0
其他的太做作了,看起来像是在混淆视听。
我只在两种情况下使用“后向”管道运算符:
当我有一个需要嵌套括号的类型构造函数时,所以 Some <| Foo ("bar", "baz")
而不是 Some (Foo ("bar", "baz"))
当我想将单个匿名函数作为最后一个参数传递时 - 它可以很好地传达操作所在的位置:
lock sync <| fun () ->
...
值得一提的是,如果有多个匿名函数作为参数传递,我通常会将它们中的每一个都用括号括起来(值得注意的异常(exception)是当其中一个是几个字符长一个衬里而另一个有多行时 -那么我仍然会使用上面的语法。
至于流水线,我通常会选择 |>
对于更长的管道,并使用函数组合 >>
对于更短的函数,当我不需要在函数体中再次引用参数时。
我不认为我会把 |>
和 <|
在同一行中,而不用括号括起其中之一。看起来很奇怪。