Почему Array#each возвращает массив с одинаковыми элементами?
Я изучаю детали того, как each
работает в Ruby, и я попробовал следующий код:
p [1,2,3,4,5].each { |element| el }
и результатом является массив
[1,2,3,4,5]
но я не думаю, что полностью понимаю, почему. Почему возвращаемое значение each
один и тот же массив? Не каждый только метод итерирования? Или это просто обычная практика для each
метод для возврата исходного значения?
3 ответов
Array#each
возвращает объект [array], на который он был вызван: результатом блока является отбрасываются. Таким образом, если нет бяка побочные эффекты к исходному массиву, то ничего не изменится.
возможно, вы хотите использовать map
?
p [1,2,3,4,5].map { |i| i*i }
массив#each
блок форма массив#each возвращает исходный объект массива. Вы обычно используете #each, когда хотите do что-то с каждым элементом массива внутри блока. Например:
[1, 2, 3, 4, 5].each { |element| puts element }
Это распечатает Каждый элемент, но возвращает оригинал массив. Вы можете проверить это с:
array = [1, 2, 3, 4, 5]
array.each { |element| element }.object_id === array.object_id
=> true
массив#map
если вы хотите вернуть новая массива хотите использовать массив#карту или один из его синонимов. Блочная форма #map возвращает другой объект массива. Например:
array.object_id
=> 25659920
array.map { |element| element }.object_id
=> 20546920
array.map { |element| element }.object_id === array.object_id
=> false
вы обычно хотите использовать #map, когда вы хотите работать с измененной версией исходного массива, оставляя оригинал без изменений.
все методы возвращают что-то. Даже если это просто nil
объект, он возвращает что-то.
Он может также вернуть исходный объект, а не возвращать nil
.