介绍
inject 方法定义在 module Enumerable 中,它让你可以通过集合中的元素 来通过某种计算得到一个值
[1,3,5,7].inject(0){|s,i| s +i} #=> 16
[1,3,5,7].inject(0){|s,i| s *i} #=>105
inject工作方式(用上面的例子来讲解): 当关联的block第一次被调用的时候:s被赋予参数的值, i 被赋予 集合的第一个元素的值,在第二次和接下来调用block的时候: s 被赋予上一次block调用返回的值。inject最后的值就是 block最后一次被调用返回的值。
note: 如果inject调用的时候没有传参数,那么第一次调用block的时候就赋予S 集合中的第一个元素,从第二个元素开始迭代也就是把第二元素赋予 i
例子如下:
[1,3,5,7].inject{|s,i| s+i} #=> 16 [1,3,5,7].inject{|s,i| s*i} #=> 105
特别用法:
[1,3,5,7].inject(:+)#=>16
note: just to add to the mystique of inject, you can also give it the name of the method you want to apply to successive elements of the collection. These examples work because, in Ruby, addition and multiplication are simply methods on numbers, and :+ is the symbol corresponding to the method +