По сути, вы изменили каждый элемент в a
для ссылки на сам список. Список рекурсивно ссылается на себя:
a[0] # => a
a[0][0] # => a[0], which is a
a[0][0][0] # => a[0][0], which is a[0], which is a
...
(# =>
- это рубин для "эта строка оценивается как")
В зависимости от того, как вы на это смотрите, оно не бесконечно. Это более или менее похоже на лист бумаги с надписью «Пожалуйста, переверните» с обеих сторон.
Причина, по которой Ruby печатает [...]
, заключается в том, что он достаточно умен, чтобы обнаружить, что список рекурсивен и позволяет избежать зацикливания.
Кстати, ваше использование each
немного не идиоматично. each
возвращает список, и вы обычно не присваиваете это возвращаемое значение переменной (поскольку у вас уже есть переменная, ссылающаяся на нее, a
в данном случае). Другими словами, ваш код назначает [0,1,2]
на a
, затем переходит на a
(устанавливает каждый элемент на a
), затем присваивает a
на a
.