好的,我需要重写这个问题。
如果我走:
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。结果相同,但有一个例外:此答案中的低级示例就像我认为的那样工作:
Eval in frame (COMMON-LISP-USER)> (invoke-restart 'go-on)
无怨无悔地返回提示。仅当从重新启动菜单中手动选择时,高级示例才会正确重新启动。