在深入研究 F# 的最新版本时,我尝试让它与 PLINQ 交互。
然而,我注意到两者在代码方面并没有很好地结合在一起。
事实上,编写如下代码似乎是不可能的:
open System.Linq
let someArray = [|"abc"; "def"|]
someArray.AsParallel().Count(new Func<_,_>(fun s -> s.Length = 3))
因为 System.Linq.ParallelEnumerable 类中包含的 ParallelQuery 的扩展方法似乎没有被 F# 采用。
如果根本不支持扩展方法,我不会感到惊讶,但是由于我可以访问为 IEnumerable 定义的 someArray.Count 扩展方法,我想知道为什么我不能访问 PLINQ 的扩展方法。
我错过了什么吗?
这是 F# 限制吗?如果是这样,是通过设计吗?如果没有,是否会在 future 的版本中解决?
最佳答案
如果你还没有使用 .NET 4.0,你可以这样写:
#r "System.Threading"
open System.Linq
let someArray = [|"abc"; "def"|]
someArray.AsParallel<string>()
|> Seq.filter (fun s -> s.Length = 3)
|> Seq.length
来到 .NET 4.0,你可以写:
let someArray = [|"abc"; "def"|]
someArray
|> Array.Parallel.filter (fun s -> s.Length = 3)
|> Array.length
F# 更喜欢使用 Seq 模块而不是 Linq 扩展方法。但是,在 FSharp.PowerPack.Linq 程序集中有一些辅助函数可用。
关于linq - F# 和 PLINQ 扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/922563/