rescue 節内で raise したときに ensure が実行されるのかされないのか、いつも思い出せないのでメモっておく
(下記の irb を実行するのはもう4回目くらいになると思う)
実行したのは
$ ruby -v
ruby 2.3.3p222 (2016-11-21 revision 56859) [universal.x86_64-darwin17]
です。
irb(main):016:0> begin
irb(main):017:1* raise "a"
irb(main):018:1> rescue => e
irb(main):019:1> puts "in rescue"
irb(main):020:1> raise
irb(main):021:1> ensure
irb(main):022:1* puts "in ensure"
irb(main):023:1> end
in rescue
in ensure
RuntimeError: a
from (irb):17
from /usr/bin/irb:11:in `<main>'
これを見るに、rescue 節で raise すると、 ensure を通りつつ例外があがっていくようである。