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 来代替。谢谢你的帮助。
解决冲突,支持 iterate
以此 :shadowing-import-from
的相关符号,这应该是一个可管理的数字。
另一个选择是 :use
唯独 rutils
的包。
最后,你可以对大多数东西使用包前缀(也许用包的名字),只显式地导入那些没有包前缀会很笨重的符号。 这也让我们更容易看到一个符号的来源。