0

检查以下代码

[1,2,3,4].map # => #<Enumerator: [1, 2, 3, 4]:map> 
[1,2,3,4].each # => #<Enumerator: [1, 2, 3, 4]:each> 

我们可以看到两者都是枚举数。一个是map,另一个是each。该方法to_enum还返回一个枚举器each。这两个枚举器有什么区别吗?

4

1 回答 1

2

是的,当您遍历地图枚举器时,它将获取结果并将其填充到一个新数组中:

[1,2,3,4].map.each { |n| n * 2 }  # => [2, 4, 6, 8]

当您遍历每个枚举器时,它将返回原始数组

[1,2,3,4].each.each { |n| n * 2 }  # => [1, 2, 3, 4]

Map 的存在是为了获取一种类型的数组并将其转换为不同类型的数组,每个存在只是为了简单地迭代数组(对每个元素做一些具有副作用的事情,例如打印出来)。

于 2013-05-07T21:25:59.367 回答