Function COMPUTE-RESTARTS

UP


Function COMPUTE-RESTARTS

Function COMPUTE-RESTARTS

構文

compute-restarts &optional condition => restarts

引数と戻り値

condition - コンディションオブジェクトか、nil
restarts - restartのリスト

定義

compute-restartsはそのプログラムの動的状態から 現在有効のrestartのリストを計算するときに使われます。

結果のリストには順番があり、 もっとも内側(より最近確立されたもの)のrestartが リストの先頭に近いものになります。

もしconditionnilではないときは、 それらのrestartは、明にconditionと関連付けられているものか、 あるいはどのコンディションにも関連付けられてないものかの どちらかのみが集められます。 これは、排他されたrestartというのは、 関連付けられたコンディションの集合が空ではなく、 その要素に指定したconditionが含まれていないということです。 もしconditionnilのときは、 全てのrestartが集められます。

compute-restartsは全ての適用可能なrestartが返却され、 それには匿名のものや、 あるものが他のものと同じ名前のものも含まれるため、 したがってfind-restartの引数にシンボルを指定したものでは 見つけることができないものも含まれます。

実装は、同じ動的環境下でcompute-restartsを繰り返し呼び出したときに、 違うリストを返却することが許されますが、必須ではありません。 compute-restartsによって返却されたリストを 全て変更したときの結果は未定義です。

Examples:

;; ユーザーへrestartを表示させるような
;; 対話式デバッガーのひとつの方法
(defun invoke-a-restart ()
  (let ((restarts (compute-restarts)))
    (do ((i 0 (+ i 1)) (r restarts (cdr r))) ((null r))
      (format t "~&~D: ~A~%" i (car r)))
    (let ((n nil) (k (length restarts)))
      (loop (when (and (typep n 'integer) (>= n 0) (< n k))
              (return t))
            (format t "~&Option: ")
            (setq n (read))
            (fresh-line))
      (invoke-restart-interactively (nth n restarts)))))

(restart-case (invoke-a-restart)
  (one () 1)
  (two () 2)
  (nil () :report "Who knows?" 'anonymous)
  (one () 'I)
  (two () 'II))
>>  0: ONE
>>  1: TWO
>>  2: Who knows?
>>  3: ONE
>>  4: TWO
>>  5: Return to Lisp Toplevel.
>>  Option: 4
=>  II

;; ユーザー定義のrestartを追加した地点では、COMPUTE-RESTARTは
;; システムが用意したrestartの情報も返却してしまうことに注意してください。
;; 例えば上記の"Return to Lisp Toplevel"がそうです。

副作用

なし。

影響

存在するrestart

例外

なし。

参考

find-restart, invoke-restart, restart-bind

備考

なし。


TOP, Github