所以基本上如果我在F#中有一个简单的列表
let ls = [3; 9; 2; 15; 3]
我想sortDescending然后采取3.我可以做这个链接:
let orderList ls = List.sortDescending ls
let take3 ls = List.take(3) ls
let main ls = (orderList >> take3) ls
这很好用,在使用F#Interactive调试器时可以满足我的需求.但我试图在所有一个表达式中内联,而不是正确的语法.是否可能,我只是没有得到语法.
let main2 ls = List.sortDescending >> List.take(3) ls
我正在从更多的面向对象心态转向C#我可以做到这一点:
var ls = new List<int>{ 3, 9, 2, 15, 3 };
var subset = ls.OrderByDescending(x => x).Take(3).ToList();
我只是期待你可以像流畅的语法INLINE一样继续链接,但看起来我缺少语法或者没有简单的东西.我最近才学习F#,但到目前为止我都在挖掘它.我只是很难将某些东西链接在一起.
Eri*_*ert 15
的>>运算符采用两个功能,并产生一个函数,该函数的这两个函数组成.
在|>操作者需要一个值和功能与值传递给函数,产生另一个值.
假设我们有
let addone x = x + 1
let double x = x * 2
然后,(addone >> double) 100和100 |> addone |> double都是202你知道为什么吗?确保这一点很清楚.
想想他们是这样的.  f >> g是组成:
let compose f g =
  fun x -> g (f x)
所以
(addone >> double) 100
是相同的
(fun x -> double ( addone x ) ) 100
哪个是一样的
double (addone 100)
虽然x |> f是管:
let pipe x f = f x
所以
100 |> addone |> double
是相同的
(addone 100) |> double
是相同的
double (addone 100)
在C#中,将扩展方法链接在一起的业务基本上是管道操作符:
customers.Take(100).ToList()
是相同的
Enumerable.ToList(Enumerable.Take(customers, 100))
| 归档时间: | 
 | 
| 查看次数: | 436 次 | 
| 最近记录: |