在常见的LISP中(在我的情况下是SBCL(,使用定义条件宏来定义异常(称为"条件"(。这在当前软件包内定义了全球条件。
是否有一种方法可以在特定范围内定义条件?或者,或者,其他一些惯用的方法可以过早退出具有值的范围,而不污染全局名称空间?
(with-conditions
(block
(...)
(prematurely-exit-block-with some-data)
(...))
(when-condition-happens (some data) ...))
是否可以在特定范围内定义本地条件?
no。
或者,或者是其他一些惯用方法,以过早退出具有值的范围,而不污染全局名称空间?
常见的LISP有几个用于此控制流的构造,其中返回一个或多个值: RETURN
, RETURN-FROM
, THROW
,...
-
RETURN
从 block 返回名为NIL
-
RETURN-FROM
从命名 block
返回 -
THROW
跳到捕获标签,该标签通过CATCH
建立
return
和return-from
使用词汇块。catch
建立了其标签的动态范围。