課題 §
N-BASICでNo RESUMEのエラーが出る条件が気になったので少し調べました。
少なくとも、エラーハンドラーの最後にENDと書いてあるとエラーは出ませんが、ENDなしで終了するとエラーになります。
検証プログラム §
10 ON ERROR GOTO 100
20 ERROR 1
30 END
100 PRINT "error handler"
110 (様々なコードを書き込んでみる。あるいはこの行を除去する)
結果 §
110行目が……
- そもそもない時→No RESUMEエラー
- ENDの時→エラーにならず正常終了
- STOPの時→普通にブレークする
- IF 0 THEN RESUME NEXT→No RESUMEエラー
- ON ERROR GOTO 0→ERROR 1に対応するNEXT without FORのエラーが発生する
結論 §
No RESUMEエラーは、ON ERROR GOTOで指定されたコードが単純にプログラム末に達した時にのみ発生するようである。
RESUMEステートメントの有無は関係なく、あっても実行されなければNo RESUMEエラーとなる。
逆に、プログラムを終了、中断、エラーハンドラーの動作を終えて当該エラーを発生させるケースでは、RESUMEステートメントが無いにも関わらずエラーにならない。
ただし、STOPで止めたあと、CONT文で継続するとNo RESUMEエラーは出る。
つまり、No RESUMEエラーは名称があまり動作を説明していない。
感想 §
ON ERROR GOTOで飛ばしたあとはRESUMEかON ERROR GOTO 0を書くと思っていたのでイレギュラーな状況での動作は調べたことがなかったが興味深い。