Function SIGNAL
signal
datum &rest arguments => nil
datum, arguments - コンディション指定子であり、標準の型はsimple-error
。
datumとargumentsで指定されたコンディションを通知します。 もしコンディションが捕捉されなかったときは、 signal
はnil
を返却します。
defun handle-division-conditions (condition)
(format t "Considering condition for division condition handling~%")
(when (and (typep condition 'arithmetic-error)
(eq '/ (arithmetic-error-operation condition)))
(invoke-debugger condition)))
(
HANDLE-DIVISION-CONDITIONSdefun handle-other-arithmetic-errors (condition)
(format t "Considering condition for arithmetic condition handling~%")
(when (typep condition 'arithmetic-error)
(abort)))
(
HANDLE-OTHER-ARITHMETIC-ERRORSdefine-condition a-condition-with-no-handler (condition) ())
(
A-CONDITION-WITH-NO-HANDLERsignal 'a-condition-with-no-handler)
(
NILhandler-bind ((condition #'handle-division-conditions)
(condition #'handle-other-arithmetic-errors))
(signal 'a-condition-with-no-handler))
(condition for division condition handling
Considering condition for arithmetic condition handling
Considering
NILhandler-bind ((arithmetic-error #'handle-division-conditions)
(arithmetic-error #'handle-other-arithmetic-errors))
(signal 'arithmetic-error :operation '* :operands '(1.2 b)))
(condition for division condition handling
Considering condition for arithmetic condition handling
Considering Back to Lisp Toplevel
*break-on-signals*
により デバッガーに入るかもしれません。
通知されたコンディションのハンドラーは 遷移を制御するかもしれません。
存在するハンドラーの束縛
なし。
*break-on-signals*
, error
, simple-condition
, 9.1.4. コンディションの通知と捕捉
もし(typep datum *break-on-signals*)
がtrueのときは、 通知処理を行う前にデバッガーに入ります。 continue
restart
は通知処理を継続するときに使われます。 このことは、条件を通知すべき、あるいは通知しなければならない 他のすべての関数やマクロにも当てはまります。