Ruby не «гарантирует» когда я «повторю попытку» в «спасении»

Рассмотрим этот блок begin-rescue-secure:

attempts=0
begin
  make_service_call()
rescue Exception
  retry unless attempts>2
  exit -1
ensure
  attemps += 1
end

Если вы запустите этот код как есть, он вызовет исключение, потому что нет функции с именем 'make_service_call () '. Итак, он повторяет попытку. Но он застрянет в бесконечном цикле, потому что элемент управления никогда не переходит в состояние «обеспечения» из-за «повторной попытки».Не следует ли «гарантировать» часть блока, чтобы код в нем запускался независимо от того, что происходит в «начале» или «спасении»?

Конечно, я могу увеличить счет в 'begin' - не в этом дело. Я просто задаю вопрос о «гарантии» для большей ясности.

10
задан Daniel A. White 22 June 2014 в 12:29
поделиться