"uiop/package:define-package"和"defpackage&quo



在带有ASDF的Common Lisp中,uiop/package中的define-packagedefpackage宏有什么区别?

UIOP的子句有更多子句。

https://common-lisp.net/project/asdf/uiop.html#UIOP_002fPACKAGE

Define-Package 支持以下关键字:use、shadowing、shadowing-import-from、import-from、export、intern -- 根据 cl:defpackage。

这些是相同的。但是文档字符串的其余部分引入了更多它们:recyclemixreexport......

我使用了reexport,这使得以下内容更容易:您不想完全use包 A(例如,亚历山大)。您想导入几个符号(简单,带import-from),并且还想导出它们(也很容易,带export)。但是在这样做时,你必须写两次符号。reexport可节省重复。

我听到一些抱怨说defpackage在某些情况下无法重新加载包,并且定义包工作正常,但我没有遇到这种情况。

(编辑):另一个区别:假设您在defpackage定义中":use"了一个包。现在,擦除该行并再次编译包定义。您的 Lisp 会给您一个警告,告诉您的软件包"也使用以下软件包",并列出您从定义中删除的软件包。您删除了该行,但包仍"使用"您要删除的内容。您可以与(describe (find-package :my-package)).

对 UIOP 的define-package做同样的事情:你没有警告,你的包不再像预期的那样"使用"你从定义中删除的包。

相关内容

  • 没有找到相关文章

最新更新