% Function INVOKE-RESTART-INTERACTIVELY
Function INVOKE-RESTART-INTERACTIVELY
invoke-restart-interactively
restart => result*
restart - restart
指定子
result - restartに関係づいた関数による返却値(もしあるなら)。
invoke-restart-interactively
は、
restart
に関連づいた関数を呼び出し、
呼び出しに必要な引数はプロンプトによって問い合わせます。
restartは現在の動的環境下で有効なものでなければなりません。
invoke-restart-interactively
は、
引数の問い合わせを
restart-case
の:interactive
キーワードか、
restart-bind
の:interactive-function
キーワードで
提供されたコードを実行することで行います。
もしそのようなオプションが
対応するrestart-bind
とrestart-case
に
指定されなかったときは、
もしrestart
が要求引数を取っていたときの結果は未定義です。
もし引数がオプションであるときは、
リストのnil
が使用されます。
いったん引数が決定すると、
invoke-restart-interactively
は
次のように実行を行います。
(apply #'invoke-restart restart arguments)
(defun add3 (x) (check-type x number) (+ x 3))
(add3 'seven)
>> Error: The value SEVEN was not of type NUMBER.
>> To continue, type :CONTINUE followed by an option number:
>> 1: Specify a different value to use.
>> 2: Return to Lisp Toplevel.
>> Debug> (invoke-restart-interactively 'store-value)
>> Type a form to evaluate and use: 7
=> 10
もし必要な引数の問い合わせが生じると、
キーボードなどのタイプによる入力が生じます(query-io
上で)。
restart
によって非局所的な遷移の制御が行われるかもしれません。
有効なrestart
restartが有効なものでないときは、
型control-error
のエラーが生じます。
find-restart
,
invoke-restart
,
restart-case
,
restart-bind
invoke-restart-interactively
は
デバッガーの内部で使用されますし、
他の移植可能な対話式デバッグツールが実装されて、
使用されるかもしれません。