バグ見つけた


掲示板にバグ報告が来ました。うん、流石の私も起動しませんネタはしません。
環境依存?と思い、可能性のありそうな箇所をチェックしてみたら、見事なバグ。例外処理が不十分でした。
とりあえず修正して再提出しました。
バグ報告して下さった方、公開ファイルを修正版に差し替えるという作業をさせてしまった主催者のSubrinaさんにはこの場を借りて感謝です。


RubyのWin32API、dll内に指定した関数がない場合、エラーを吐いてくれるのですね。てっきり、nilを返してくれるものだとばかり思っていました。

api = Win32API.new('user32', 'hoge', 'l', 'l')

こんな感じに書くと、user32.dllにはhogeなんて関数はありませんから、エラーが出ます。ちゃんと例外処理してなかったら、ここで落ちます。落ちました、ゴメンナサイ。

api = Win32API.new('user32', 'hoge', 'l', 'l') rescue api = nil

これで大丈夫、失敗したらぬるぽるだけ。ぬるぽってるという仮定で例外処理を書いていたので、後は適切に処理されるはず。
Rubyの例外構文、このrescue修飾子がすごく便利ですね。一行だけのためにbegin/rescue/endでくくるのはかったるいので、すごく嬉しいです。