匿名代码块

读到Ruby里有个东西叫code block,它支持closure。

list = [1,2,3,4,5,6,7,8,9,10]
sum = 0
list.each() {|i| sum = sum + i}

这里,红字的{….}的东西就是code block。在上面,数组调用了它本身的方法,each(),而each()则会通过yield来反复调用code block里的语句。

在C#2.0中,code block相当于匿名方法,类似的实现

int[] list = {1,2,3,4,5,6,7,8,9,10};
int sum = 0;
Array.ForEach<int>(list, delegate(int i) { sum += i; });

但如果使用LINQ的话,类似运算可以简化为

int sum = list.Sum();

注意,这个Sum()方法并不是数组类本身的方法,而是标准查询运算符(Standard Query Operators)中的方法

打赏作者