• 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

Rubyはメソッド定義内で begin/end が無くても直接rescueやensureを記述できますが、これは無駄な記述を減らす上でとても魅力的な文法だと思います。

   1  def foo
   2    puts "hello world :-)"
   3  rescue
   4    puts "something wrong :'-("
   5  end

この書き方のまま、所定回数だけretryしたい場合、retry回数を覚えておくカウンタ変数を用意する場所に困ったりするのですが (ローカル変数として定義すると、retry後に再初期化されてしまいますからね) 以下のように引数として用意しておくと、methodが定義するブロックよりも外側のライフタイムを持つので、retryカウンタとして使えます。

   1  def foo(bar = 0)
   2    puts bar
   3    raise 
   4  rescue
   5    bar += 1
   6    retry if bar < 10
   7  end
   8  
   9  foo

実行した結果は以下の通り

   1  0
   2  1
   3  2
   4  3
   5  4
   6  5
   7  6
   8  7
   9  8
  10  9

posted by Png genki on Sat 28 May 2011 at 01:29 with 1 comment

Comments:

Face dsjf about 11 years ago.

https://gist.github.com/6bf1bf2c3cbb5eb6e7a7 これでも出来そうです

or Preview
Social Bookmarks
  • Delicious
  • B_entry1928
  • Clip_16_12_w
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ