CLisp:“use-package”以非交互方式解决冲突

时间:2010-03-06 23:33:34

标签: packages common-lisp

我正在尝试在GNU common lisp中使用parenscript将lisp文件编译为javascript文件。

我发现如果我尝试使用它的前缀(“ps:@”),使用PS符号宏“@”不起作用。但是,如果我在尝试编译lisp文件之前使用REPL并运行(use-package:ps),一切都按预期工作(我不必使用前缀)。

问题是PS包中包含冲突符号,例如:

*** - (USE-PACKAGE (#<PACKAGE PARENSCRIPT>) #<PACKAGE COMMON-LISP-USER>): 2 name conflicts remain  
  Which symbol with name "CHAIN" should be accessible in #<PACKAGE COMMON-LISP-USER>?  
  The following restarts are available:  
PARENSCRIPT    :R1      #<PACKAGE PARENSCRIPT>  
COMMON-LISP-USER :R2    #<PACKAGE COMMON-LISP-USER>  
ABORT          :R3      Abort main loop

我可以通过选择:r1以交互方式解决这个问题,但是当我尝试将此步骤放在我的脚本中时,它只是保释(因为它是非交互式的,它不能让我选择重启使用什么)

我想说(在我的剧本中)“只使用所有冲突符号的PS版本”,但我无法弄清楚如何这样做。

如果我可以说(可能是在python中),“来自PS导入链,@,(等)”也是可以的 - 指定我想手动导入的每个符号。

1 个答案:

答案 0 :(得分:8)

不要使用COMMON-LISP-USER包,而是使用DEFPACKAGE创建自己的包:

(defpackage #:my-awesome-program
  (:use #:cl #:parenscript))

(in-package #:my-awesome-program)

; your code here

COMMON-LISP-USER可能包含各种特定于实现的符号。

您还可以使用SHADOWING-IMPORT获取单个符号,覆盖包中当前可见的内容,例如

(shadowing-import 'ps:*)