【问题标题】:How to Shadow an Entire Package in Common Lisp如何在 Common Lisp 中隐藏整个包
【发布时间】:2020-06-03 15:11:39
【问题描述】:

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 代替。感谢您的帮助。

【问题讨论】:

标签: package common-lisp shadow


【解决方案1】:

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

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

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

【讨论】:

  • 关于第二种方法,在快速加载后如何获得聚合包中所有包的列表:rutils?
  • 我会查看源文件(packages.lisp)。
猜你喜欢
  • 2020-04-24
  • 1970-01-01
  • 2011-12-24
  • 1970-01-01
  • 2021-09-03
  • 2012-08-06
  • 1970-01-01
  • 1970-01-01
  • 2011-01-10
相关资源
最近更新 更多