Function WARN
warn datum &rest arguments => nil
datum, arguments - コンディション指定子であり、標準の型はsimple-error。
型warningのコンディションを通知します。 もしコンディションが捕捉されなかったときは、 error-outputにコンディションを報告します。
警告の正確な仕組みは下記の通り。
warningコンディションを通知
warningコンディションの通知を始めるとき、 muffle-warning restartがハンドラーとして確立します。 もし起動されたら、このrestartはwarnによるアクションを素通りして、 その次にwarnを即座にnilで返却させます。 warningコンディションのハンドラーが見つからなかったとき
nilが返却される
(defun foo (x)
(let ((result (* x 2)))
(if (not (typep result 'fixnum))
(warn "You're using very big numbers."))
result))
=> FOO
(foo 3)
=> 6
(foo most-positive-fixnum)
>> Warning: You're using very big numbers.
=> 4294967294
(setq *break-on-signals* t)
=> T
(foo most-positive-fixnum)
>> Break: Caveat emptor.
>> To continue, type :CONTINUE followed by an option number.
>> 1: Return from Break.
>> 2: Abort to Lisp Toplevel.
>> Debug> :continue 1
>> Warning: You're using very big numbers.
=> 4294967294警告が表示されます。 デバッガーに入るかもしれません。
存在するハンドラーの束縛
*break-on-signals*, *error-output*
datumがコンディションのとき、 そのコンディションが型warningではなかったか、 あるいは(datumがコンディションでありかつ) argumentsがnilでなかったときは、 型type-errorのエラーが通知されます。
datumがコンディションの型のときは、 (apply #'make-condition datum arguments)の結果は 型warningでなければならず、 そうでないときは型type-errorおエラーが通知されます。
*break-on-signals*, muffle-warning, signal,
なし。