从这段代码中,我不知道collecteach这两种方法之间的区别.

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#collectArray#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.

Ruby相关问答推荐

Rack并发 - rack.multithread、async.callback 或两者兼而有之?

如何判断一个对象在 Ruby 中是否可迭代?

Sinatra 与 EventMachine WebSockets 一起工作是否成功?

Integer(value) 和 value.to_i 之间的区别

在 Go (golang) 中编写一个 Ruby 扩展

ruby:对两个或多个数组的对应成员求和

将 ruby​​ hash .default 设置为列表

按键对哈希进行分组并对值求和

如何将值保存到 YAML 文件中?

对于基于 GitHub 的 gem,强制Bundle 安装使用 https:// 而不是 git://

Jekyll - 找不到命令

用元素填充数组 N 次

从命令行调用 ruby​​ 函数

判断是否在 SASS 中定义了变量

Ruby - time.now UTC

错误数量的参数(1 代表 0)在 Ruby 中是什么意思?

如何在 macOS 上卸载 rbenv?

如何在没有 RVM 的 Ubuntu 上安装 Ruby 2

Ruby 的 %q / %Q 引用方法的用例是什么?

判断文件名是文件夹还是文件