这里面对两个函数的用法已经讲得很清楚了,我就不再解释了,但是我们可以看到下图,两个函数的用法说明是一摸一样的,但用法示例却是不一样的,难道区别就在这里吗?
于是我就抱着一种求知探索的精神把这两个函数都试了一遍,最终发现它们真的是一模一样的,
先不说这么多,上图自己看(虽然我还是不死心,但是时间紧迫,先试到这里)
感觉讲到这里就没什么好讲了,不行,这样子走掉很没面子的,就再来扯下皮,嗯~,就说一下对inject和reduce函数的个人理解吧,基于上面证明两者是一样的,我就用inject来讲解下(不要问我为什么用inject,因为我喜欢,个人比较懒,就直接用官方示例了)
刚刚写到下面发现写不下去了,所以先回来讲一下inject的作用机理
enum.reduce(initial) { |memo, obj| block }
enum:数组
initial:为初始值赋值
memo:初始值
obj:遍历数组里的具体对象
block:方法体
1.把initial的值赋给memo
2.memo和obj经过block的处理得出的值再次赋给memo
3.这时候memo的值已经更新,继续与obj经过block的处理得出的值再次赋给memo
4.一直重复3步骤直到enum遍历到最后一个对象
基本使用语法:
好,搞定,收工,如果有什么问题可以在下面留言
.all?这是一个ruby方法,他的返回结果只有两个,true或者false,判断的是数组中每一个元素都是true的就返回true,只要有一个不是true就返回false,如[nil,22].all?返回的就是false。还有就是判断数组遍历运算过程中,每一个结果是不是true,如[1,2,3].all?{|w| w >1}这个的结果就是false。你的例子中,作为判断对象的是一个空数组,不执行后面的代码,也没有一个元素是false的,所以返回的是true,这是我的见解
each:连续遍历集合中的所有元素,并做相应的操作,原集合本身不会发生变化。map: 从集合中获取每个元素,并且传递给块,结果会返回新的数组,原集合发生变化
collect: 类似于map
inject:遍历整个集合,并且将集合中的元素,按照一定的方式累计,最后返回一个新的元素,原集合本省不会发生变化。