为什么将块传递给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}
答案 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
如果将整个事物括在括号中,它将为您提供正确的返回值。