Рассмотрим этот блок start-rescue-ensure:
attempts=0
begin
make_service_call()
rescue Exception
retry unless attempts>2
exit -1
ensure
attemps += 1
end
Если вы запустите этот код как есть, он вызовет исключение, поскольку в нем нет функции с именем make_service_call(). Итак, он повторяет попытку. Но он застрял бы в бесконечном цикле, потому что элемент управления никогда не переходит к «обеспечению» из-за «повторной попытки». Не должна ли «обеспечить» часть блока гарантировать, что код в ней будет выполнен независимо от того, что происходит в «начале» или «спасении»?
Конечно, я могу увеличить счет в «начале» — это не главное. Я просто задаю вопрос об «убедиться», чтобы получить некоторую ясность.