28th Sat
retry回数制限つきrescueの書き方のメモ
Rubyはメソッド定義内で begin/end が無くても直接rescueやensureを記述できますが、これは無駄な記述を減らす上でとても魅力的な文法だと思います。
ruby>>
def foo
puts "hello world :-)"
rescue
puts "something wrong :'-("
end
<<--
この書き方のまま、所定回数だけretryしたい場合、retry回数を覚えておくカウンタ変数を用意する場所に困ったりするのですが
(ローカル変数として定義すると、retry後に再初期化されてしまいますからね)
以下のように引数として用意しておくと、methodが定義するブロックよりも外側のライフタイムを持つので、retryカウンタとして使えます。
ruby>>
def foo(bar = 0)
puts bar
raise
rescue
bar += 1
retry if bar < 10
end
foo
<<--
実行した結果は以下の通り
pre>>
0
1
2
3
4
5
6
7
8
9
<<--
これでも出来そうです