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
3)
(foo => 6
most-positive-fixnum)
(foo
>> Warning: You're using very big numbers.=> 4294967294
setq *break-on-signals* t)
(=> T
most-positive-fixnum)
(foo
>> Break: Caveat emptor.continue, type :CONTINUE followed by an option number.
>> To 1: Return from Break.
>> 2: Abort to Lisp Toplevel.
>> 1
>> Debug> :continue
>> 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
,
なし。