如何在 Common Lisp 中隐藏整个包

How to Shadow an Entire Package in Common Lisp

Common Lisp 提供了 :shadow 子句来禁止继承您不想使用的包名称。但是如何隐藏整个名称包?

这是我的基本设置:

#-cl-ppcre (ql:quickload :cl-ppcre)
#-iterate (progn (ql:quickload :iterate) (push :iterate *features*))
#-rutilsx (progn (ql:quickload :rutilsx) (push :rutilsx *features*))

(defpackage :concepts
  (:use :cl :cl-ppcre :iterate :rutilsx)
  (:shadow :iter)  ;error
  (:nicknames :con))

但这会产生名称冲突。

问题是 :rutilsx 包含 :iter 包,我想禁用它,所以我可以改用 :iterate。感谢您的帮助。

通过从那里对相关符号进行 :shadowing-import-from 来解决有利于 iterate 的冲突,这应该是一个易于管理的数字。

另一种选择是 :use 您需要的唯一特定 rutils 软件包。

最后,您可以对大多数东西使用包前缀(可能使用包本地昵称),并且只显式导入那些没有包前缀会很笨重的符号。这也可以更容易地查看符号的来源。