Los efectos secundarios son los mismos, lo que agrega cierta confusión a su ingeniería inversa.
Sí, ambos iteran sobre la matriz (en realidad, sobre cualquier cosa que se mezcle en Enumerable ) pero el mapa devolverá una matriz compuesta por los resultados del bloque, mientras que cada una simplemente devolverá la matriz original.
El valor de retorno de cada uno es solo la matriz original y rara vez se usa en el código Ruby, pero el mapa es una de las herramientas funcionales más importantes .
Lo que map
hace es devolver una matriz que contiene los resultados del bloque o método nombrado que se pasa. Por ejemplo:
2.2.3 :001 > [:how, :now, :brown, :cow].map &:to_s
=> ["how", "now", "brown", "cow"]
En este caso, no pasé un bloque sino solo un Symbol
, sin embargo, los class Symbol
objetos tienen un to_proc
método que dará como resultado:
[:how.to_s, :now.to_s, ...]
Por cierto, es posible que tenga dificultades para encontrar la documentación porque map es un método en Enumerable, mientras que cada (el único método requerido por el módulo Enumerable ) es un método en Array .
Como nota de trivia: la implementación del mapa se basa en cada uno .