Tim*_*mwi 3 f# api-design language-design
为什么Collections.Seq模块有很多方法看起来等同于声明的扩展方法System.Linq.Enumerable?为什么F#的设计者觉得需要为所有这些创建一个新的命名空间和新的/不同的名称而不是重用.NET中已有的名称?
(如果他们需要一些额外的方法,他们为什么不将它们添加到System.Linq.Enumerable?)
因为LINQ方法位于System.Core =>仅在.NET 3.5及更高版本上可用,而F#base库支持.NET 2.0+.
另外,Seq函数的使用方式(通过管道)对于LINQ Enumerable扩展的点样式的F#代码更为自然.
另一个原因是在F#中使用管道运算符(|>,<|,>>).
.NET扩展方法是basicaly为第一个参数提供部分应用程序.F#pipelining oprators partial适用于最后一个参数.Seq模块中的所有函数都将序列作为最后一个参数.
C#
seq.Where(...)
.Select(...)
.Take(...)
Run Code Online (Sandbox Code Playgroud)
F#
seq
|> Seq.filter ...
|> Seq.map ...
|> Seq.take ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
372 次 |
| 最近记录: |