raiseとraise-continuableとwith-exception-handler。
Scheme(R7RS)の例外の発生とハンドラについてまとめた。
with-exception-handerで例外ハンドラを登録し、raise、raise-continuableで例外を発生させる。
raiseとraise-continuableの違いは、handlerを呼び出した後での処理に違いがある。
with-exception-handler
(with-exception-handler handler thunk )
- thunk内で例外が発生するとhandlerが実行される。
- handlerは1引数の手続き。
- thunkは名前の通り引数なし手続き。
raise-continuable
(raise-continuable obj)
- 例外を発生させ、objをhandlerに渡す。
- handlerが実行し終えると、例外を発生させた場所に戻る。返り値はhandlerの結果。
- 一度handlerを呼び出して戻ってきても、再度例外を発生させれば同じhandlerが立ち上がる。
raise
(raise obj)
- 例外を発生させ、objをhandlerに渡す。
- handlerが実行し終えると、二度目の別の例外が発生する。
- 二度目の例外を補足するhandlerへ渡る値は規定されていない
- 二度目の例外のhandlerは、一つ外側のwith-exception-handerで登録されたhandlerが呼び出される