2012-10-26 29 views
2

我已經使用asdf同時使用parenscript和clsql定義了一個通用的lisp包。使用asdf和defpackage自動解析符號命名衝突

但是這些軟件包在函數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

基於@Rainer Joswigs上面的回答,具體的回答我的問題就是寫我的defpackage形式如下:

(defpackage #:my-package 
     (:use :cl :clsql :parenscript) 
     (:shadowing-import-from :parenscript "GET-TIME") 
    ) 
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