从这段代码中,我不知道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相同,它对所有项应用给定的代码块并返回新数组.简单地说'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

还有一个数组.但它的值是["L"、"Z"、"J"],因为它返回self.

Ruby相关问答推荐

ruby:rubocop 抱怨将 if else 转换为 case 语句

为什么我们在 Ruby 中有 0.0 和 -0.0?

Ruby,从字符串中删除最后 N 个字符?

为什么整数除法在许多脚本语言中舍入?

从命令行使用Bundle 器将 gem 添加到 gemfile

为什么表达式 (true == true == true) 会产生语法错误?

线程安全:Ruby 中的类变量

如何在 Mac OSX Yosemite 中将 Ruby 版本 2.0.0 更新到最新版本?

判断字符串是否为空的Ruby方法?

带有可选参数的方法

运行 pod setup 给我“错误的解释器:没有这样的文件或目录”错误

无法在 OS X“El Capitan”上安装 gem

当我将参数传递给脚本时,使用 gets() 会出现“没有这样的文件或目录”错误

如何解决 RVM 安装过程中的“gpg: command not found”错误?

如何解决“/usr/bin/env: ruby​​_executable_hooks: No such file or directory”?

Ruby:如何计算一个字符串在另一个字符串中出现的次数?

如何在 10.10 Yosemite 上安装 therubyracer gem?

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

如何在 Rails 3 迁移中描述枚举列?

在Ruby中将关键字与常规参数混合?