2012/01/03

rescue節は新しい変数スコープを定義しない

プログラミング言語 Rubyより

rescue節は新しい変数スコープを定義しないので、rescue節で名前を与えられた変数は、rescue節終了後も見えることに注意しよう。

プログラミング言語 Ruby 第2版 165ページ 例外オブジェクトの命名

え?まじで?かなり直感に反するんですが。

begin
  a = b
rescue => ex
  puts ex # undefined local variable or method `b' for main:Object                      
end
puts ex  # undefined local variable or method `b' for main:Object                       

まじだった...。なんでこんな仕様なんだろう...。