今日のハマり。
begin式全体の評価値は、本体/rescue節/else節のうち 最後に評価された文の値です。また各節において文が存在しなかったときの値 はnilです。いずれにしてもensure節の値は無視されます。
たとえばこんなことしてました。
1 Foo.find(:all).inject(0) do |num_processed, foo|
2 begin
3 foo.bar # ここでraise
4 num_processed += 1
5 rescue => evar
6 logger.error(evar.message)
7 ensure
8 num_processed
9 end
10 end
8行目をensureの外に出して解決した。
コメント
1 Foo.find(:all).inject(0) do |num_processed, foo|
2 begin
3 foo.bar # ここでraise
4 num_processed += 1
5 rescue => evar
6 logger.error(evar.message)
7 ensure
8 next num_processed
9 end
10 end
とか。
うわーnextっ!
はずかしー、ありがとうございまっす!