为什么Array#每个都返回一个具有相同元素的数组?
我正在学习each
如何在ruby中工作的细节,我尝试了以下代码行:
p [1,2,3,4,5].each { |element| el }
结果是一个数组
[1,2,3,4,5]
但我不认为我完全理解为什么。 为什么each
相同数组的返回值? 难道每个都不提供迭代方法吗? 或者, each
方法返回原始值只是通常的做法?
Array#each
返回调用它的[array]对象:块的结果被丢弃 。 因此,如果原始arrays没有任何不良副作用,那么一切都不会改变。
也许你的意思是使用map
?
p [1,2,3,4,5].map { |i| i*i }
每个arrays#
Array#的块forms返回原始的Array对象。 当您想要对块内的数组的每个元素执行某些操作时,通常使用#each。 例如:
[1, 2, 3, 4, 5].each { |element| puts element }
这将打印出每个元素,但返回原始数组。 您可以通过以下方式validation:
array = [1, 2, 3, 4, 5] array.each { |element| element }.object_id === array.object_id => true
arrays#地图
如果要返回新数组,则需要使用Array#map或其中一个同义词。 #map的块forms返回不同的Array对象。 例如:
array.object_id => 25659920 array.map { |element| element }.object_id => 20546920 array.map { |element| element }.object_id === array.object_id => false
当您想要对原始数组的修改版本进行操作时,通常需要使用#map,同时保持原始数据不变。
所有方法都返回了一些 即使它只是一个nil
对象,它也会返回一些东西。
它也可以返回原始对象而不是返回nil
。