回答:
ところで、代替オプションは次のようなものにすることができます:
(let ((error t))
(unwind-protect
(prog1 (call-function)
(setq error nil))
(when error (cleanup))))
利点は、エラーのキャッチと再スローを回避できることです。これは、たとえば、デバッガーが正しいバックトレース(他の誰かのエラーの再スローに対応するものではなく、エラーの実際のソースに対応するもの)を表示することを意味します)。
別の違いは、cleanup
エラーが発生したときだけでなく、C-g
またはへの呼び出しによってコードが中断された場合にも呼び出されることthrow
です。
quit
にありませんerror
)。IOWあなたもヴァンでそれをキャッチcondition-case
しますが、そのためにはあなたがquit
一緒に置く必要がありますerror
。もちろん、それでも「スロー」のケースは処理されません。
あなたが探していますsignal
:
(condition-case err
(call-function)
(error
(cleanup)
(signal (car err) (cdr err)))) ; reraise `err'
signal
が、そのプロトタイプはそうでは(signal ERROR-SYMBOL DATA)
ありません(signal ERROR)
。
car
ていcdr
ます。回答を更新しました。
condition-case
キャッチkeyboard-quit
?