我使用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有关,但我并不理解该文档页面上给出的示例。
答案 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")
)