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