我对‘和symbol做了一些实验:
MATCHERS> (package-shadowing-symbols *package*)
(AND)无论是(setf (package-shadowing-symbols *package*) nil)还是Slime都不能工作。
发布于 2017-01-04 22:16:50
遗憾的是,没有非破坏性的方法来解决你的问题:“阴影”意味着你在“光源”(cl:and)和你正在观察的光斑(下面的字符串"AND" )之间有“一些东西”(temp-pack::and):
(let ((*package* (find-package '#:temp-pack)))
(read-from-string "AND"))
=> TEMP-PACK::AND, 3唯一的出路就是清除阻挡光线的障碍物。
来自shadow的修改后的示例应该具有指导性:
(package-shadowing-symbols (make-package '#:temp-pack))
=> NIL
(find-symbol "AND" '#:temp-pack)
=> AND, :INHERITED
(shadow "AND" '#:temp-pack)
=> T
(find-symbol "AND" '#:temp-pack)
=> TEMP-PACK::AND, :INTERNAL
(package-shadowing-symbols '#:temp-pack)
=> (TEMP-PACK::AND)
(find-all-symbols "AND")
=> (:AND AND TEMP-PACK::AND)
(unintern 'temp-pack::and '#:temp-pack)
=> T
(find-all-symbols "AND")
=> (:AND AND)
(package-shadowing-symbols '#:temp-pack)
=> NIL你必须从TEMP-PACK unintern AND,因为只要它驻留在那里,它就会隐藏CL:AND。
此外,保存符号的技巧不起作用:
(shadow "AND" '#:temp-pack)
=> T
(defparameter temp-pack-and 'temp-pack::and)
=> TEMP-PACK-AND
(unintern 'temp-pack::and '#:temp-pack)
=> T
(shadow "AND" '#:temp-pack)
=> T
temp-pack-and
=> #:AND
(eq temp-pack-and 'temp-pack::and)
=> NIL这是因为intern创建了一个新元件:
如果在包中已经可以访问与字符串同名的符号,则返回该符号。如果包中没有这样的符号可访问,则会创建一个具有给定名称的新符号,并将其作为内部符号
输入到包中
https://stackoverflow.com/questions/41458643
复制相似问题