エラー
http://ns.wisdom.co.jp/~ono/programming/ruby/intro/intro_03.htm
に
$@ 例外が発生した時のバックトレース配列。
っていう解説があったので、エラーが出たら見てやろうと思ってましたが、よくよく考えてみれば、チュートリアルのは、'やendが足りないとかそういう文法上のエラーなのでパーサーが出すエラーはtry〜catchみたいのじゃ捕まえられないんじゃないの?と思ったわけです。でも気になるので、rubyのリファレンスで例外のところを見てみると・・・
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=%C0%A9%B8%E6%B9%BD%C2%A4#a.ce.e3.b3.b0.bd.e8.cd.fd
なんと、例外としてSyntaxErrorを発生させている例が書いてあるではないですか。
っていうわけで早速調べる。
begin〜resque〜ensure〜endがJavaで言うtry〜catch〜finallyに当たるらしい。で、組み込み変数 $! で例外オブジェクトが取得できるらしい。
begin if true puts '後ろのシングルクォーテーションがないのさ' rescue p $! end
ってやってみたら
test.rb:2: unterminated string meets end of file test.rb:2: syntax error
ってでた。そらそうだね。文末まで文字列として解釈しようとしてるのね。
代わりにこう書いてみた。
begin if true puts '今度はifに対応するendがないのさ' rescue p $! end
するってーと今度は、
test.rb:4: syntax error test.rb:6: syntax error
って出た。p $!をコメントアウトすると
test.rb:4: syntax error
としか出ない。成功じゃん。インタプリタだからsyntax errorも例外として拾えるんだね。