1
Я пытаюсь выполнить следующий код:уровень стека слишком глубоко: SystemStackError
class Array
def each
for i in self
yield(i)
end
end
end
[1,2,3,4].each {|i| puts i*i}
, когда я запускаю этот код я получаю следующее сообщение об ошибке:
stack level too deep (SystemStackError)
Но следующий код выполнить успешно:
class Array
def each
yield(self[0])
yield(self[1])
yield(self[2])
yield(self[3])
end
end
[1,2,3,4].each {|i| puts i*i}
Выход:
1
4
9
16
Я думаю, это потому, что 'для ... в' использует' each' внутренне поэтому вы создаете рекурсию. Попробуйте называть ваш метод, чтобы он не сталкивался со встроенным методом. –
Да, это работает, если я меняю «каждый» на «aech» –
Если целью этого упражнения является научиться реализовывать «каждый» самостоятельно, тогда вы просто обманываете. Вы в основном просто вызываете встроенный 'каждый' снова, просто в маскировке' for'/'in'. –