Эти побочные эффекты такие же , которые добавляют некоторую путаницу в вашу обратную инженерию.
Да, оба перебирают массив (фактически, все, что смешивается в Enumerable ), но map вернет массив, состоящий из результатов блока, в то время как каждый просто вернет исходный массив.
Возвращаемое значение каждого из них - это просто исходный массив, который редко используется в коде Ruby, но map - один из наиболее важных функциональных инструментов .
Что map
делает, так это возвращает массив, содержащий результаты переданного блока или именованного метода. Например:
2.2.3 :001 > [:how, :now, :brown, :cow].map &:to_s
=> ["how", "now", "brown", "cow"]
В этом случае я передал не блок, а просто объект Symbol
, однако у class Symbol
объектов есть to_proc
метод, который приведет к:
[:how.to_s, :now.to_s, ...]
Кстати, вам может быть сложно найти документацию, потому что карта - это метод в Enumerable а каждый (один метод, требуемый модулем Enumerable ) - это метод в Array .
Небольшое примечание: реализация карты основана на каждом .