% Function WARN
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
,
なし。