如何在块内临时定义条件?

时间:2019-05-27 17:05:20

标签: exception lisp conditional-statements common-lisp flow-control

Common Lisp(在我的情况下特别是SBCL)中,通常使用define-condition宏定义异常(称为“条件”)。这将在当前程序包中全局定义条件。

有没有办法在特定范围内本地定义条件?或者,或者,采用其他一些惯用的方式来提前退出具有值的作用域,而不污染全局名称空间吗?

(with-conditions
  (block
    (...)
    (prematurely-exit-block-with some-data)
    (...))
  (when-condition-happens (some data) ...))

1 个答案:

答案 0 :(得分:4)

  

是否可以在特定范围内在本地定义条件?

否。

  

或者,或者,通过其他一些惯用的方式过早地退出带有值的作用域,而不污染全局名称空间吗?

Common Lisp具有用于这种控制流的几种构造,其中返回一个或多个值:RETURNRETURN-FROMTHROW,...

  • RETURN从名为NIL返回
  • RETURN-FROM从命名的 block
  • 返回
  • THROW跳转到一个catch标签,该标签是通过CATCH建立的

returnreturn-from使用词法块。 catch为其标签建立动态范围。