¿Cuál es la diferencia entre map, each, y collect?

En Ruby, ¿hay alguna diferencia entre las funcionalidades de each , map y collect ?

each es diferente de map y collect , pero map and collect son las mismas (técnicamente el map es un alias para collect , pero en mi experiencia, el map se usa con mucha más frecuencia).

each realiza el bloque cerrado para cada elemento en el receptor ( Enumerable ):

 [1,2,3,4].each {|n| puts n*2} # Outputs: # 2 # 4 # 6 # 8 

map y collect producen una nueva Array contiene los resultados del bloque aplicado a cada elemento del receptor:

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

¡También hay un map! / collect! definido en Array s; ellos modifican el receptor en su lugar:

 a = [1,2,3,4] a.map {|n| n*2} # => [2,4,6,8] puts a.inspect # prints: "[1,2,3,4]" a.map! {|n| n+1} puts a.inspect # prints: "[2,3,4,5]" 

Each evaluará el bloque pero descarta el resultado de la evaluación de Each bloque y devuelve el conjunto original.

 irb(main):> [1,2,3].each {|x| x*2} => [1, 2, 3] 

Map / collect devuelve una matriz construida como resultado de llamar al bloque para cada elemento en la matriz.

 irb(main):> [1,2,3].collect {|x| x*2} => [2, 4, 6]