我正在学习如何each
在 ruby 中工作的详细信息,并尝试了以下代码行:
p [1,2,3,4,5].each { |element| el }
结果是一个数组
[1,2,3,4,5]
但我不认为我完全理解为什么。为什么返回值是each
同一个数组?不都只是提供了一种迭代的方法吗?还是该each
方法返回原始值只是常见的做法?
Array#each
返回调用它的 [array] 对象:块的结果被丢弃。因此,如果原始数组没有不良副作用,那么什么都不会改变。
也许你的意思是使用map
?
p [1,2,3,4,5].map { |i| i*i }
Array#each的块形式返回原始的 Array 对象。当您想对块内数组的每个元素执行某些操作时,通常使用#each。例如:
[1, 2, 3, 4, 5].each { |element| puts element }
这将打印出每个元素,但返回原始数组。您可以通过以下方式验证这一点:
array = [1, 2, 3, 4, 5]
array.each { |element| element }.object_id === array.object_id
=> true
如果要返回一个新数组,则需要使用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,同时保持原始数组不变。
所有方法都返回一些东西。即使它只是一个nil
对象,它也会返回一些东西。
它还不如返回原始对象而不是 return nil
。
如果您出于某种原因想要抑制输出(例如在控制台中调试),您可以通过以下方式实现
[1,2,3,4,5].each do |nr|
puts nr.inspect
end;nil