我正在学习each在ruby中如何工作的细节,并尝试了以下代码行:
each
p [1,2,3,4,5].each { |element| el }
结果是一个
[1,2,3,4,5]
为什么each的返回值是同一个数组?each不就是提供了一个迭代的方法吗?或者each方法返回原始值只是一种常见的做法?
u7up0aaq1#
Array#each返回调用它的[array]对象:则块的结果被 * 丢弃 *。因此,如果原始数组没有 * 讨厌 * 的副作用,那么什么都不会改变。您可能会使用map。
Array#each
map
p [1,2,3,4,5].map { |i| i*i }
wlwcrazw2#
如果你想,出于某种原因,抑制输出(例如在控制台中调试),这里是你可以实现的方式
[1,2,3,4,5].each do |nr| puts nr.inspect end;nil
nxagd54h3#
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
如果你想返回一个 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,而原始数组保持不变。
pxy2qtax4#
所有方法都返回一些东西。即使它只是一个nil对象,它也会返回一些东西。它也可以返回原始对象,而不是返回nil。
nil
4条答案
按热度按时间u7up0aaq1#
Array#each
返回调用它的[array]对象:则块的结果被 * 丢弃 *。因此,如果原始数组没有 * 讨厌 * 的副作用,那么什么都不会改变。您可能会使用
map
。wlwcrazw2#
如果你想,出于某种原因,抑制输出(例如在控制台中调试),这里是你可以实现的方式
nxagd54h3#
Array#each
Array#each的块形式返回原始Array对象。当你想对块中的数组的每个元素做一些事情时,你通常会使用#each。举例来说:
这将打印出每个元素,但返回 original 数组。您可以通过以下方式进行验证:
Array#map
如果你想返回一个 new 数组,你想使用Array#map或它的同义词之一。#map的块形式返回一个不同的Array对象。举例来说:
当你想在原始数组的修改版本上操作时,你通常会想使用#map,而原始数组保持不变。
pxy2qtax4#
所有方法都返回一些东西。即使它只是一个
nil
对象,它也会返回一些东西。它也可以返回原始对象,而不是返回
nil
。