匿名代码块

2006-01-17 by 开心就好

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

list = [1,2,3,4,5,6,7,8,9,10]
sum = 0
list.each() <font color="#ff0000">{|i| sum = sum + i}</font>

这里,<font color="#ff0000">红字的{....}</font>的东西就是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)中的方法


Comments