From:http://blog.jayfields.com/2008/03/ruby-inject.html
?
实体分析?
??? inject带有一个参数和block。block中的两个参数是有含义的。第一个参数reslut在inject第一次执行block时把inject带的参数赋值给它,element就是数组中的元素,该例中inject一共执行4次block(次数更据元素长度定义),每次执行block完后,最后语句的结果再赋值给result,直到遍历数组中所有元素。我们深入这个例子看每一步执行的结果。?
因为数组有4个元素,所以要执行4次block操作:?
? 第一次操作:result=0,既等于inject带的参数;element=1,既第一个元素;执行block后result + element =1,再把这个结果付值给result,所以在执行完第一次block后,result = 1。?
? 第二次操作:result=1,既上次运行block后的最后一条语句的结果;element=2,既第二个元素;执行block后付值result=3。?
如此类推,直到最后一次执行完block,生产的值为10。就是inject的返回值了。?
??? inject可以不带参数,此时result的初始值为数组元素的第一个值。所以上例可改写成:?
这时执行block的次数为3次。?
??? 文章中还提到也其它用法:?
把array转换成hash表。有也第一个例子的基础,这个例子应该很容易看得懂。?
??? 再看一个例子,需要对一数组元素进行过滤并进行一些加工,?
上面代码实现选取数组中的偶数,并把它们转换成字符型。用inject如何实现呢??
?