Кажется, что каждое возвращение во второе измерение 2D-массива
Я только что наткнулся на этот способ перебора 2-мерных массивов в Ruby:
[[1, 2], [3, 4]].each {|x| puts x}
Выход:
1
2
3
4
Мой вопрос прост: почему и как это происходит? Почему Array#each
казалось бы, возвращаясь во второе измерение? Почему вывод не так?
[1, 2]
[3, 4]
1 ответ
Решение
Изменение кода на:
[[1, 2], [3, 4]].each {|x| puts x.to_s}
Дает ожидаемый результат:
[1, 2]
[3, 4]
Оказывается, магия происходит в IO#puts
, не в Array#each
, Из документов:
При вызове с аргументом массива записывает каждый элемент в новую строку.
Так IO#puts
является рекурсивным, если задан аргумент массива.