所以我有以下代码:
// Learn more about F# at http://fsharp.net
open System
open System.Linq
open Microsoft.FSharp.Collections
let a = [1; 2; 3; 4; 54; 9]
let c = a |> List.map(fun(x) -> x*3) |> List.filter(fun(x) -> x > 10)
let d = a.Select(fun(x) -> x*3).Where(fun(x) -> x > 10)
for i in c do
Console.WriteLine(i)
for i in d do
Console.WriteLine(i)
两者似乎都能实现相同的功能,但我看到大部分 F# 的示例使用 |> 管道操作符,而我更习惯方法链式调用(类似于 C# 的 Linq)。后者更短一些,尽管有点紧凑。目前我正在使用 C# Linq 语法,但这更多是个人习惯和惯性,而非任何真正的设计决策。
有没有任何需要注意的地方,或者它们基本上是相同的呢?
编辑: 另一个考虑因素是,管道语法比 Linq 语法要更加 "嘈杂":我正在进行的操作(例如 "map")非常简短且为小写字母,而每个操作前面都有一个巨大的 "|> List",除了使代码变长外,还会分散眼球注意力,远离微小的小写方法名称。即使在 StackOverflow 的语法突出显示器中,也会突出显示错误(不相关的)内容。可能是因为我还不太习惯吧。
Seq.map
的部分应用。Seq.map
需要两个参数,一个函数和一个序列;我们提供了函数。(+)
是一个接受两个参数的函数;我们提供了第一个参数(1
)。另一个参数将是序列的每个元素。这有帮助吗? - Daniel