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