忘れたときに備えた記録

トップ 最新 追記
2005|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|11|12|
2009|01|02|03|04|05|06|10|12|
2010|06|07|08|12|
2011|07|09|
2012|09|11|
2013|02|03|09|
2015|10|11|
2016|01|08|11|
2017|02|08|10|
2018|11|

2010-07-06(Tuesday)

beginの直後に処理がかけて嬉しい

Rubyで処理を書いていて、ある1行のメソッド呼び出しについてのみ例外が発生したらその場で回収したいという場合があります。

今まではそれを

#!/usr/bin/ruby
def raising_exception
   raise "TEST"
end

def test
   # 何か他の処理
   # 他の処理
   # 他の処理
   # ...
   begin
      raising_exception
   rescue StandardError
      puts $!.message
   end
   # 他の処理
   # 他のsy
end

と書いていたんですが、何かこう美しくない感じがして好きではありませんでした。

例えば

   if raised_on{raising_exception}
   then rescue StandardError
      puts $!.message
   end

みたく書けたらすっきりするのになと思っていたわけです。

それがついさっき、ふと思いついて試したら

   begin raising_exception
   rescue StandardError
      puts $!.message
   end

と書いてもちゃんと動くことが分かりました。ほんの1行の違いなんですが、何となくこちらの方が好みです。

';'を使って

begin; raising_exception

と書くなら大丈夫だとは思ったんですが、';'がいらないというのはちょっと驚きです。

リファレンスマニュアルにはない書き方なので将来的には使えなくなるかもしれませんが、とりあえず

  • ruby 1.8.7 (2010-01-10 patchlevel 249) [i486-linux]
  • ruby 1.9.3dev (2010-07-06 trunk 28554) [i686-linux]

では使えるようです。

Tags: ruby