2017-02-19 46 views
0

爲什麼將塊傳遞給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,您將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 

如果將括號中的全部內容括起來,它會給你正確的返回值。