Кажется, что каждое возвращение во второе измерение 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 является рекурсивным, если задан аргумент массива.

Другие вопросы по тегам