用于重命名导出符号的批量 `unintern`
Bulk `unintern` for renamed exported symbols
我经常使用包,导出的符号经常更改名称。当我尝试重新编译包时,我收到这样的警告:
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
...)
我知道我可以使用 (unintern 'old-symbol1)
向系统发出我不想再使用该符号的信号。然而,当有很多重命名时,这变得非常乏味。
我的问题是:
1) 是否可以自动向 sbcl
或 emacs
向 unintern
发送 old/previously 导出的符号?
2) 如果不是-是否可以在变量中获取所有 "old" 符号?
我的 2) 计划是将键绑定到 (apply #'unintern *old-symbols*)
首先,我认为您不想统一符号。 Unintern 将它们从包中移除。我认为您想取消导出它们以避免警告。您可以使用以下函数来做到这一点
(defun unexport-package-symbols (package)
(do-symbols (symbol package)
(destructuring-bind (symbol status)
(find-symbol (symbol-name symbol) package)
(when (eq status :external)
(cl:unexport symbol package)))))
;; It takes a package-designator as an argument.
(unexport-package-symbols "MY-PACKAGE")
将变量 *on-package-variance*
设置为列表 (:error t)
将在重新定义包时给您一个错误而不是警告。该错误将重新启动 DROP-THEM
以取消导出符号。
您可以添加
(setf *on-package-variance* '(:error t))
您的 ~/.sbclrc
在启动 SBCL 时始终设置它。
我经常使用包,导出的符号经常更改名称。当我尝试重新编译包时,我收到这样的警告:
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
...)
我知道我可以使用 (unintern 'old-symbol1)
向系统发出我不想再使用该符号的信号。然而,当有很多重命名时,这变得非常乏味。
我的问题是:
1) 是否可以自动向 sbcl
或 emacs
向 unintern
发送 old/previously 导出的符号?
2) 如果不是-是否可以在变量中获取所有 "old" 符号?
我的 2) 计划是将键绑定到 (apply #'unintern *old-symbols*)
首先,我认为您不想统一符号。 Unintern 将它们从包中移除。我认为您想取消导出它们以避免警告。您可以使用以下函数来做到这一点
(defun unexport-package-symbols (package)
(do-symbols (symbol package)
(destructuring-bind (symbol status)
(find-symbol (symbol-name symbol) package)
(when (eq status :external)
(cl:unexport symbol package)))))
;; It takes a package-designator as an argument.
(unexport-package-symbols "MY-PACKAGE")
将变量 *on-package-variance*
设置为列表 (:error t)
将在重新定义包时给您一个错误而不是警告。该错误将重新启动 DROP-THEM
以取消导出符号。
您可以添加
(setf *on-package-variance* '(:error t))
您的 ~/.sbclrc
在启动 SBCL 时始终设置它。