传递给map的长版块返回Enumerator?

时间:2017-02-19 18:48:06

标签: arrays ruby enumerator

为什么将块传递给Array#map(下面的#2)的长版本返回一个枚举器,而下面的#1和#3返回数组?

方法#1:返回一个数组

result = [1, 2, 3].map do |num|
  num * 2
end
p result

方法#2:返回枚举器

p [1, 2, 3].map do |num|
  num * 2
end

方法#3:返回一个数组

p [1, 2, 3].map {|num| num * 2}

1 个答案:

答案 0 :(得分:2)

在#2中,您将map的返回值(枚举数)传递给p

[1, 2, 3].map #returns an enumerator

另一方面,在#1和#3中,您将块直接传递给map,因此返回值是一个数组。

p ([1, 2, 3].map do |num|
  num * 2
end) # returns an array

如果将整个事物括在括号中,它将为您提供正确的返回值。