次の begin-rescue-ensure ブロックを考えてみましょう。
attempts=0
begin
make_service_call()
rescue Exception
retry unless attempts>2
exit -1
ensure
attemps += 1
end
そのコードをそのまま実行すると、「make_service_call()」という関数がないため、例外が発生します。それで、リトライします。しかし、「再試行」のために制御が「確実」にならないため、無限ループに陥ります。ブロックの一部を「保証」して、「開始」または「レスキュー」で何が起こっても、ブロック内のコードが実行されるようにするべきではありませんか?
もちろん、'begin' でカウントを増やすこともできますが、それは重要ではありません。明確にするために、「保証」について質問しているだけです。