1年くらい前(?)にわたしのTLで話題になったやつに1年越しでいい案が生まれたので、こういうのはどうかという記事を書く。 id:kksg 向けのエントリである。
class MyError < StandardError; end def maybe_fail(max_retry = 1) raise MyError, 'error' unless rand(3) == 0 p 'success!' rescue MyError => e throw e if max_retry <= 0 # retry しすぎてたらそのまま例外投げ直す p 'failure!' maybe_fail(max_retry - 1) end maybe_fail # 1回リトライする maybe_fail(10) # 10回リトライする
リトライしたいみたいな処理、基本的に一連の処理であろうからそこはメソッドにくくってしまい、retry するときに再帰するというスンポーである