2017-02-19 1 views
0

Pourquoi la version longue du passage d'un bloc à Array # map (# 2 ci-dessous) renvoie un énumérateur, alors que # 1 et # 3 ci-dessous retournent des tableaux?La version longue du bloc transmis à la carte renvoie l'énumérateur?

Méthode n ° 1: Retourne un tableau

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

Méthode n ° 2: Retourne un énumérateur

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

Méthode n ° 3: Retourne un tableau

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

Répondre

0

In N ° 2, vous passez la valeur de retour de map, qui est un énumérateur, dans p.

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

Dans # 1 et # 3, d'autre part, vous passez le bloc directement dans map, de sorte que la valeur de retour est un tableau.

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

Si vous entourez le tout entre parenthèses, il vous donnera la valeur de retour appropriée.