用于重命名导出符号的批量“unintern”

tsi*_*kov 3 sbcl common-lisp

我经常使用包,导出的符号经常更改它们的名称。当我尝试重新编译包时,我收到如下警告:

package.lisp:3:1:
warning: 
    MY-PROJECT also exports the following symbols:
  (OLD-SYMBOL1 OLD-SYMBOL2 OLD-SYMBOL3)

See also:
  Common Lisp Hyperspec, DEFPACKAGE [:macro]
  SBCL Manual, *ON-PACKAGE-VARIANCE* [:variable]
--> EVAL-WHEN 
==>
  (SB-IMPL::%DEFPACKAGE "MY-PACKAGE" '("KE") 'NIL 'NIL 'NIL '("CL") 'NIL
                        'NIL '("NEW-EXPORTED-SYMBOL1" "NEW-EXPORTED-SYMBOL2") '("MY-PROJECT") 'NIL
                        ...)
Run Code Online (Sandbox Code Playgroud)

我知道我可以用来(unintern 'old-symbol1)向系统发出信号,我不想再使用该符号。然而,当有很多重命名时,这变得非常乏味。

我的问题是:

1)能够发信号通知sbclemacsunintern旧的/先前导出的自动的符号?

2)如果不是 - 是否可以在变量中获取所有“旧”符号?

我的 2) 计划是对类似的东西进行键绑定 (apply #'unintern *old-symbols*)

jki*_*ski 5

将变量设置*on-package-variance*为列表(:error t)将在重新定义包时给出错误而不是警告。该错误将重新启动DROP-THEM以取消导出符号。

你可以加

(setf *on-package-variance* '(:error t))
Run Code Online (Sandbox Code Playgroud)

~/.sbclrc把它启动时SBCL始终设置。