gpt4 book ai didi

map - 方法链 vs |> 管道操作符

转载 作者:行者123 更新时间:2023-12-03 11:07:27 24 4
gpt4 key购买 nike

所以我有以下代码:

// 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# 示例都使用 |> 管道运算符,而我更习惯于方法链接(a.l.a. C# Linq)。后者也更短一些,尽管在一起更紧缩。现在我使用 C# Linq 语法,但这更多是习惯/惯性,而不是任何真正的设计决定。

是否有任何我应该了解的注意事项,或者它们基本上相同?

编辑:
另一个考虑因素是 Pipe 语法比 Linq 语法更“嘈杂”:我正在执行的操作(例如“map”)非常短且小写,而每个操作前面都带有这个巨大的“|>列表”那个,除了让它更长之外,还会分散注意力,远离微小的、小写的方法名称。甚至 StackOverflow 的语法高亮显示错误(不相关)的东西。要么就是我不习惯。

最佳答案

流水线支持 F# 的从左到右的类型推断。 a.GroupBy要求 a 的类型已知是 seq<_> , 而 a |> Seq.groupBy自身推断 a成为 seq<_> .以下功能:

let increment items = items |> Seq.map (fun i -> i + 1)

需要使用 LINQ 编写类型注释:
let increment (items:seq<_>) = items.Select(fun x -> x + 1)

当您对函数式风格感到满意时,您会找到使代码更简洁的方法。例如,前面的函数可以缩短为:
let increment = Seq.map ((+) 1)

关于map - 方法链 vs |> 管道操作符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7698133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com