今更ながら Ruby技術者認定試験のGOLD を受けようと思い
模擬試験問題を解いていたところ...奇妙なコードに出くわした。
忘れると痛い目を見そうなので、ここに記述する
begin 'aaa'.bbbb rescue puts "レスキュー出来たね" end #=> レスキュー出来たね
何も問題はない
begin 'aaa'.bbbb rescue NoMethodError puts "レスキュー出来たね" end #=> レスキュー出来たね
これも問題ない
期待通りの動きである
begin 'aaa'.bbbb rescue NameError puts "レスキュー出来たね" end #=> レスキュー出来たね
- むむ?
- エラーの種類が違うのでは?
begin 'aaa'.bbbb rescue StandardError puts "ここには来ないよね?" rescue NoMethodError puts "レスキュー出来たね" end #=> ここには来ないよね?
来てしまったのである
原因を追うと...
NoMethodError の親クラス = NameError NameError の親クラス = StandardError
という事みたい。
トラップだな。気をつけないとね。