这是一个纯粹出于好奇的问题:
假设我有这个对象:
let a = [1; 2; 3; 4]
Run Code Online (Sandbox Code Playgroud)
我可以通过以下方式获得最大值:
a |> List.max
List.max a
Run Code Online (Sandbox Code Playgroud)
但是有什么可以阻止将其设置为:
a.max
Run Code Online (Sandbox Code Playgroud)
同样,如果我想要一个排序列表,然后取前 2 个结果:
a |> List.sort |> List.truncate 2
Run Code Online (Sandbox Code Playgroud)
但是关于:
a.sort.truncate(2)
Run Code Online (Sandbox Code Playgroud)
我知道这不是 F# 的惯用语,但是既然库在那里,为什么也不允许这样做呢?我很好奇是否有明确的原因不启用此选项。
通过FSharp.Core.Fluent-4.0包,您可以做到这一点。
F# 5 脚本:
#r "nuget:FSharp.Core.Fluent-4.0"
open FSharp.Core.Fluent
let a = [1..10]
printfn $"{a.max()}"
printfn $"{a.map(fun x -> x + 1)}"
printfn $"{a.filter(fun x -> x % 2 <> 0)}"
Run Code Online (Sandbox Code Playgroud)
它不是 F# 的默认选项,因为在相同的集合函数上提供替代“视图”从来都不是设计目标。如果您对此感兴趣,可以在语言和核心库建议存储库中提出建议并与社区贡献者讨论。