使用asdf和defpackage自动解决符号命名冲突

时间:2012-10-26 09:48:52

标签: common-lisp asdf

我使用asdf定义了一个常见的lisp包,它使用了parenscript和clsql。

但是这些软件包在函数GET-TIME周围存在命名冲突。加载模块后,我可以在提示符下手动解决冲突(代码可能不准确):

Select a symbol to be made accessible in package MY_PACKAGE:
   1. PS-JS-SYMBOLS:GET-TIME
   2. CLSQL-SYS:GET-TIME

我选择了选项1.

修改项目的最佳方法是什么,以便自动解决此冲突?

我是否修改.asd文件或project.lisp文件?

我认为答案可能与:shadowing-import-from有关,但我并不理解该文档页面上给出的示例。

2 个答案:

答案 0 :(得分:5)

软件包符号导出使用等等是Common Lisp的一个功能,而不是ASDF具体。

CL-USER 1 > (defpackage "FOO" (:use "CL") (:export "BAZ"))
#<The FOO package, 0/16 internal, 1/16 external>

CL-USER 2 > (in-package "FOO")
#<The FOO package, 0/16 internal, 1/16 external>

FOO 3 > (defun baz () 'FOO)
BAZ

FOO 4 > (defpackage "BAR" (:use "CL") (:export "BAZ"))
#<The BAR package, 0/16 internal, 1/16 external>

FOO 5 > (defun bar:baz () 'bar::bar)
BAR:BAZ

FOO 6 > (in-package "CL-USER")
#<The COMMON-LISP-USER package, 54/64 internal, 0/4 external>

CL-USER 7 > (defpackage "ZIPPY"
              (:use "FOO" "BAR")
              (:shadowing-import-from "BAR" "BAZ"))
#<The ZIPPY package, 1/16 internal, 0/16 external>

CL-USER 8 > (in-package "ZIPPY")
#<The ZIPPY package, 1/16 internal, 0/16 external>

ZIPPY 9 > (baz)
BAR::BAR

答案 1 :(得分:0)

基于@Rainer Joswigs上面的回答,我的问题的具体答案是写下我的defpackage表格如下:

 (defpackage #:my-package 
      (:use :cl :clsql :parenscript)
      (:shadowing-import-from :parenscript "GET-TIME")
      )