Хорошо, мне нужно переписать этот вопрос.Каков самый быстрый и простой способ воспользоваться ранее существующим перезапуском?
Если я:
CL-USER> whatever
Я получаю это в отладчик кадра:
The variable WHATEVER is unbound.
[Condition of type UNBOUND-VARIABLE]
Restarts:
0: [RETRY] Retry SLIME REPL evaluation request.
1: [*ABORT] Return to SLIME's top level.
2: [TERMINATE-THREAD] Terminate this thread (#<THREAD "repl-thread" RUNNING {C0C6CF9}>)
...
Поэтому я должен быть в состоянии сделать это:
(handler-case
whatever
(unbound-variable (e) (invoke-restart 'retry)))
Тем не менее она дает :
No restart RETRY is active.
[Condition of type SB-INT:SIMPLE-CONTROL-ERROR]
...
Что мне не хватает?
Повторная попытка ABORT работает правильно; спасибо hans и Svante за указание на это. Остальные - повторите попытку, завершите-нить и т. Д. - все ошибки.
Я также попытался нажать e в отладчике и запустить INVOKE-RESTART напрямую. Тот же результат с одним исключением: пример низкого уровня в this answer работ, как я думаю, что он должен:
Eval in frame (COMMON-LISP-USER)> (invoke-restart 'go-on)
возвращается к строке без жалобы. Пример высокого уровня будет корректно перезагружаться, только если он выбран вручную из меню перезапуска.
Спасибо. Это делает трюк. Угадайте, что бесконечный цикл не должен был меня удивлять. :-) – BnMcGn