Ответ 1
each
отличается от map
и collect
, но map
и collect
одинаковы (технически map
является псевдонимом для collect
, но по моему опыту map
используется гораздо чаще).
each
выполняет закрытый блок для каждого элемента в приемнике (Enumerable
):
[1,2,3,4].each {|n| puts n*2}
# Outputs:
# 2
# 4
# 6
# 8
map
и collect
создайте новый Array
содержащий результаты блока, применяемого к каждому элементу приемника:
[1,2,3,4].map {|n| n*2}
# => [2,4,6,8]
Там также map!
/collect!
, определенный на Array
s; они изменяют приемник на месте:
a = [1,2,3,4]
a.map {|n| n*2} # => [2,4,6,8]
puts a.inspect # prints: "[1,2,3,4]"
a.map! {|n| n+1}
puts a.inspect # prints: "[2,3,4,5]"