Gli effetti collaterali sono gli stessi, il che aggiunge un po 'di confusione al tuo reverse engineering.
Sì, entrambi iterano sull'array (in realtà, su tutto ciò che si mescola in Enumerable ) ma map restituirà un Array composto dai risultati del blocco mentre ognuno restituirà semplicemente l'Array originale.
Il valore di ritorno di ciascuno è solo l'array originale ed è usato raramente nel codice Ruby, ma map è uno degli strumenti funzionali più importanti .
Ciò che mapfa è restituire un array che contiene i risultati del blocco o del metodo denominato passato. Per esempio:
2.2.3 :001 > [:how, :now, :brown, :cow].map &:to_s
=> ["how", "now", "brown", "cow"]
In questo caso non ho passato un blocco ma solo un Symbol, tuttavia gli class Symbologgetti hanno un to_procmetodo che risulterà in:
[:how.to_s, :now.to_s, ...]
BTW, potresti avere difficoltà a trovare la documentazione perché map è un metodo in Enumerable mentre each (l'unico metodo richiesto dal modulo Enumerable ) è un metodo in Array .
Come nota curiosa: l' implementazione della mappa si basa su ciascuna di esse .