从这段代码中,我不知道collect
和each
这两种方法之间的区别.
a = ["L","Z","J"].collect{|x| puts x.succ} #=> M AA K
print a.class #=> Array
b = ["L","Z","J"].each{|x| puts x.succ} #=> M AA K
print b.class #=> Array
从这段代码中,我不知道collect
和each
这两种方法之间的区别.
a = ["L","Z","J"].collect{|x| puts x.succ} #=> M AA K
print a.class #=> Array
b = ["L","Z","J"].each{|x| puts x.succ} #=> M AA K
print b.class #=> Array
Array#each
获取一个数组,并将给定的块应用于所有项.它不会影响数组或创建新对象.这只是一种在项目上循环的方式.它还返回self .
arr=[1,2,3,4]
arr.each {|x| puts x*2}
打印2,4,6,8并返回[1,2,3,4],无论发生什么情况
Array#collect
与Array#map
相同,它对所有项应用给定的代码块并返回新array.简单地说'Projects each element of a sequence into a new form'
arr.collect {|x| x*2}
返回[2,4,6,8]
在你的代码中
a = ["L","Z","J"].collect{|x| puts x.succ} #=> M AA K
a是一个数组,但它实际上是一个由Nil的[nil,nil,nil]组成的数组,因为puts x.succ
返回nil
(尽管它打印的是M AA K).
和
b = ["L","Z","J"].each{|x| puts x.succ} #=> M AA K
还有一个array.但它的值是["L"、"Z"、"J"],因为它返回self.