Array#each
接受一个数组并将给定的块应用于所有项目。它不会影响数组或创建新对象。这只是循环项目的一种方式。它还返回自身。
arr=[1,2,3,4]
arr.each {|x| puts x*2}
打印 2,4,6,8 并返回 [1,2,3,4] 无论如何
Array#collect
与Array#map
它将给定的代码块应用于所有项目并返回新数组。简单的说'将序列的每个元素投影成新的形式'
arr.collect {|x| x*2}
返回 [2,4,6,8]
在你的代码中
a = ["L","Z","J"].collect{|x| puts x.succ} #=> M AA K
a 是一个数组,但它实际上是一个 Nil 的数组[无,无,无]因为puts x.succ
回报nil
(尽管它打印出 M A A K)。
And
b = ["L","Z","J"].each{|x| puts x.succ} #=> M AA K
也是一个数组。但它的值是["L","Z","J"],因为它返回self。