Os efeitos colaterais são os mesmos, o que confunde sua engenharia reversa.
Sim, ambos iteram sobre o array (na verdade, sobre qualquer coisa que se misture em Enumerable ), mas map retornará um Array composto dos resultados do bloco, enquanto cada um retornará apenas o Array original.
O valor de retorno de cada um é apenas o array original e raramente é usado no código Ruby, mas map é uma das ferramentas funcionais mais importantes .
O que map
faz é retornar um array que contém os resultados do bloco ou método nomeado que é passado. Por exemplo:
2.2.3 :001 > [:how, :now, :brown, :cow].map &:to_s
=> ["how", "now", "brown", "cow"]
Neste caso, não passei um bloco, mas apenas um Symbol
, no entanto, os class Symbol
objetos têm um to_proc
método que resultará em:
[:how.to_s, :now.to_s, ...]
BTW, você pode estar tendo dificuldade em encontrar a documentação porque map é um método em Enumerable, enquanto cada (o único método exigido pelo módulo Enumerable ) é um método em Array .
Como uma curiosidade: a implementação do mapa é baseada em cada um .