急切的管道是否在 F# 中创建多个列表?

Do eager pipes create multiple lists in F#?

使用列表时,管道会创建多个中间主机吗?这对垃圾收集来说不是很糟糕吗?

let mylist = [...]
let filterByPipes ls = 
   somefilter ls //is a list created here
   |> otherFiler  // and then again here
   |> filtersForDays // and finally returned here

是的,F# 使用应用求值顺序,这意味着每个值都必须经过全面求值才能作为参数传递给函数,这意味着是的,在每一步都会创建一个新列表。

至于是否对垃圾回收不利...“先测量再优化”-优化的第一条规则。

在大多数情况下,数据量是微乎其微的,实际上并没有什么区别,绝对不足以弥补代码可读性的巨大提升。

但是,如果您的测量确实确定了这个特定位置的瓶颈,并且事实证明它对最终目标很重要,那么是的,您将不得不手动融合处理链。或者也许采用更高效的数据结构。这一切都取决于优化目标是什么。