Error handling 如何在重新启动时手动移动
是否可以像这样在重新启动时进行手动移动:Error handling 如何在重新启动时手动移动,error-handling,common-lisp,Error Handling,Common Lisp,是否可以像这样在重新启动时进行手动移动: (handler-bind ((simple-error #'(lambda(condition) (write condition) (invoke-restart 'alle condition)))) (restart-case (restart-case (error 'simple-error) (nex
(handler-bind ((simple-error #'(lambda(condition)
(write condition)
(invoke-restart 'alle condition))))
(restart-case
(restart-case
(error 'simple-error)
(next (err)))
(alle (err) (invoke-restart 'next))))
(restart-case
(restart-case
(handler-bind ((simple-error #'(lambda(condition)
(write condition)
(invoke-restart 'alle condition))))
(error 'simple-error))
(alle (err) (invoke-restart 'next)))
(next () #|do nothing|#))
这目前导致了
No restart NEXT is active.
[Condition of type SB-INT:SIMPLE-CONTROL-ERROR]
我希望能够实现像“只记录所有条件”这样的常规重启,然后对其表达式中显示的任何条件调用正确的重启。您应该按相反顺序指定所有内容,如下所示:
(handler-bind ((simple-error #'(lambda(condition)
(write condition)
(invoke-restart 'alle condition))))
(restart-case
(restart-case
(error 'simple-error)
(next (err)))
(alle (err) (invoke-restart 'next))))
(restart-case
(restart-case
(handler-bind ((simple-error #'(lambda(condition)
(write condition)
(invoke-restart 'alle condition))))
(error 'simple-error))
(alle (err) (invoke-restart 'next)))
(next () #|do nothing|#))
有关详细信息,请参阅。您应该按相反的顺序指定所有内容,如下所示:
(handler-bind ((simple-error #'(lambda(condition)
(write condition)
(invoke-restart 'alle condition))))
(restart-case
(restart-case
(error 'simple-error)
(next (err)))
(alle (err) (invoke-restart 'next))))
(restart-case
(restart-case
(handler-bind ((simple-error #'(lambda(condition)
(write condition)
(invoke-restart 'alle condition))))
(error 'simple-error))
(alle (err) (invoke-restart 'next)))
(next () #|do nothing|#))
有关详细信息,请参阅。您可以检查这是否真的是您想要做的。。。通常,您希望处理程序选择最佳重启。处理程序会看到所有可用的重新启动。从重启到重启是不寻常的。依我拙见在某些情况下,也没有“正确”的重新启动。可能会有几次重启可用且有用。这可以由用户以编程方式或交互方式确定。对于几种不同的情况,重新启动也可能有用 通用Lisp条件系统有几个基本概念:
- 条件,通常作为CLOS类实现
- 发送信号通常在用户代码中完成的条件对象
- 处理条件。根据条件选择并调用处理程序。当处理程序运行时,它可以检查并决定执行什么操作。处理程序通常拒绝处理该条件或选择一个可用的重新启动。在一个典型的开发环境中,这可能涉及显示重启并要求用户进行选择
- 重新启动。然后,重新启动负责脱离状况。将控制权转移到重启可以使我们脱离错误上下文。我们可以通过“UNWIND-PROTECT”强制执行代码。一旦我们重新启动,发出条件信号的上下文就消失了
有关条件系统思想的一些背景信息,请参阅Kent Pitman的本文: 你可以检查一下这是否真的是你想要做的。。。通常,您希望处理程序选择最佳重启。处理程序会看到所有可用的重新启动。从重启到重启是不寻常的。依我拙见在某些情况下,也没有“正确”的重新启动。可能会有几次重启可用且有用。这可以由用户以编程方式或交互方式确定。对于几种不同的情况,重新启动也可能有用 通用Lisp条件系统有几个基本概念:
- 条件,通常作为CLOS类实现
- 发送信号通常在用户代码中完成的条件对象
- 处理条件。根据条件选择并调用处理程序。当处理程序运行时,它可以检查并决定执行什么操作。处理程序通常拒绝处理该条件或选择一个可用的重新启动。在一个典型的开发环境中,这可能涉及显示重启并要求用户进行选择
- 重新启动。然后,重新启动负责脱离状况。将控制权转移到重启可以使我们脱离错误上下文。我们可以通过“UNWIND-PROTECT”强制执行代码。一旦我们重新启动,发出条件信号的上下文就消失了
有关条件系统思想的一些背景信息,请参阅Kent Pitman的本文: 你可以看看这是否真的是你想要做的。。。通常,您希望处理程序选择最佳重启。处理程序会看到所有可用的重新启动。从重启到重启是不寻常的。依我拙见在某些情况下,也没有“正确”的重新启动。可能会有几次重启可用且有用。这可以由用户以编程方式或交互方式确定。在几种不同的情况下,重启可能也很有用。事实上,你是对的,在我看来,这是一个设计错误。把你的答案作为评论贴出来,我会接受的。不过,一个更全面的答案可能对未来的用户更有用。你可以检查一下这是否真的是你想要做的。。。通常,您希望处理程序选择最佳重启。处理程序会看到所有可用的重新启动。从重启到重启是不寻常的。依我拙见在某些情况下,也没有“正确”的重新启动。可能会有几次重启可用且有用。这可以由用户以编程方式或交互方式确定。在几种不同的情况下,重启可能也很有用。事实上,你是对的,在我看来,这是一个设计错误。把你的答案作为评论贴出来,我会接受的。不过,一个更全面的答案可能对未来的用户更有用。