在Common Lisp(在我的情况下特别是SBCL)中,通常使用define-condition宏定义异常(称为“条件”)。这将在当前程序包中全局定义条件。
有没有办法在特定范围内本地定义条件?或者,或者,采用其他一些惯用的方式来提前退出具有值的作用域,而不污染全局名称空间吗?
(with-conditions
(block
(...)
(prematurely-exit-block-with some-data)
(...))
(when-condition-happens (some data) ...))
答案 0 :(得分:4)
是否可以在特定范围内在本地定义条件?
否。
或者,或者,通过其他一些惯用的方式过早地退出带有值的作用域,而不污染全局名称空间吗?
Common Lisp具有用于这种控制流的几种构造,其中返回一个或多个值:RETURN
,RETURN-FROM
,THROW
,...
RETURN
从名为NIL
的块返回RETURN-FROM
从命名的 block THROW
跳转到一个catch标签,该标签是通过CATCH
建立的 return
和return-from
使用词法块。 catch
为其标签建立动态范围。