ruby 为什么Array#each返回一个具有相同元素的数组?

egdjgwm8  于 12个月前  发布在  Ruby
关注(0)|答案(4)|浏览(129)

我正在学习each在ruby中如何工作的细节,并尝试了以下代码行:

p [1,2,3,4,5].each { |element| el }

结果是一个

[1,2,3,4,5]

为什么each的返回值是同一个数组?each不就是提供了一个迭代的方法吗?或者each方法返回原始值只是一种常见的做法?

u7up0aaq

u7up0aaq1#

Array#each返回调用它的[array]对象:则块的结果被 * 丢弃 *。因此,如果原始数组没有 * 讨厌 * 的副作用,那么什么都不会改变。
您可能会使用map

p [1,2,3,4,5].map { |i| i*i }
wlwcrazw

wlwcrazw2#

如果你想,出于某种原因,抑制输出(例如在控制台中调试),这里是你可以实现的方式

[1,2,3,4,5].each do |nr|
    puts nr.inspect
  end;nil
nxagd54h

nxagd54h3#

Array#each

Array#each的块形式返回原始Array对象。当你想对块中的数组的每个元素做一些事情时,你通常会使用#each。举例来说:

[1, 2, 3, 4, 5].each { |element| puts element }

这将打印出每个元素,但返回 original 数组。您可以通过以下方式进行验证:

array = [1, 2, 3, 4, 5]
array.each { |element| element }.object_id === array.object_id
=> true

Array#map

如果你想返回一个 new 数组,你想使用Array#map或它的同义词之一。#map的块形式返回一个不同的Array对象。举例来说:

array.object_id
=> 25659920
array.map { |element| element }.object_id
=> 20546920
array.map { |element| element }.object_id === array.object_id
=> false

当你想在原始数组的修改版本上操作时,你通常会想使用#map,而原始数组保持不变。

pxy2qtax

pxy2qtax4#

所有方法都返回一些东西。即使它只是一个nil对象,它也会返回一些东西。
它也可以返回原始对象,而不是返回nil

相关问题