Ruby no 'asegura' cuando 'reintento' en 'rescate'

Considere este bloque de inicio-rescate-garantía:

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

Si ejecuta ese código tal como está, genera una excepción porque no hay una función llamada 'make_service_call ()'. Entonces, vuelve a intentarlo. Pero estaría atascado en un bucle infinito porque el control nunca va a 'garantizar' debido al 'reintento'. ¿No debería 'asegurar' una parte del bloque para garantizar que el código en él se ejecute sin importar lo que suceda en 'comenzar' o 'rescatar'?

Por supuesto, puedo incrementar el conteo en 'comenzar', ese no es el punto. Solo estoy haciendo la pregunta sobre 'asegurar' para obtener algo de claridad.

Respuestas a la pregunta(2)

Su respuesta a la pregunta