ホーム > Ruby > ensure節の値は無視されます。

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

2008 年 7 月 17 日

今日のハマり。

制御構造 – 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の外に出して解決した。

LINEで送る
Pocket

カテゴリー: Ruby タグ:
  1. Yugui
    2008 年 7 月 18 日 10:57 | #1

    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

    とか。

  2. yoshuki
    2008 年 7 月 18 日 21:44 | #2

    うわーnextっ!
    はずかしー、ありがとうございまっす!

コメントは受け付けていません。