後置の rescue では例外クラスを指定できない
タイトルの通りなんですが、知らなくてちょっと悩んだので忘れないようにメモ。
require 時の LoadError を無視したくて以下のようにしたところ、何度試しても rescue 出来ませんでした。
require 'hoge' rescue LoadError #=> cannot load such file -- hoge (LoadError)
当たり前ですが以下のようにすれば問題ありません。
begin require 'hoge' rescue LoadError end
しばらく試行錯誤した末、ドキュメントをよくよく探してみると以下のように書いてあるのを発見。
捕捉する例外クラスを指定することはできません。 (つまり、StandardError 例外クラスのサブクラスだけしか捕捉できません)
http://docs.ruby-lang.org/ja/2.0.0/doc/spec=2fcontrol.html#begin
なるほど。
Ruby の rescue の後置記法(rescue 修飾子)って例外クラスを指定できないんですね。
以下のような書き方が特にエラーにならなかったので、普通に例外クラスは指定できているものだとばかり思っていましたが、どうやら間違いだったようです。
nil.hello rescue NoMethodError
どうしても一行で書きたい場合は以下のようにするしかないようです。
begin; require 'hoge'; rescue LoadError; end
同じキーワードなので動作も同じと勝手に思い込んでしまっていました。
こういう事もあるんですね。
気をつけねば。