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 map
fa è 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 Symbol
oggetti hanno un to_proc
metodo 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 .