アーカイブ

ensure節の値は無視されます。 このエントリーを含むはてなブックマーク はてなブックマーク - ensure節の値は無視されます。

2008 年 7 月 17 日 コメント 2 件

今日のハマり。

制御構造 – Rubyリファレンスマニュアル

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の外に出して解決した。

カテゴリー: Ruby タグ: