我经常使用包,导出的符号经常更改其名称。当我尝试重新编译包时,我得到这样的警告:
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
发信号通知旧/先前导出的符号?
2)如果不是 - 是否可以获得所有" old"变量中的符号?
我的2)计划是将密钥绑定到(apply #'unintern *old-symbols*)
答案 0 :(得分:4)
将变量(:error t)
设置为列表DROP-THEM
会在重新定义包时给出错误而不是警告。该错误将重新启动(setf *on-package-variance* '(:error t))
以取消导出符号。
您可以添加
~/.sbclrc
到你的 new Thread() {
override def run(): Unit = {
processedDF.write.format("ORC").options(Map("path" ->
integrationFullPath)).mode(SaveMode.Overwrite).saveAsTable(HIVE_SCHEMA + "."
+ hiveTableName + "_int")
}
}.start()
new Thread() {
override def run(): Unit = {
errorDF.write.format("ORC").options(Map("path" ->
errorFullPath)).mode(SaveMode.Overwrite).saveAsTable(HIVE_SCHEMA + "." +
hiveTableName + "_error")
}
}.start()
以便在启动SBCL时始终设置它。
答案 1 :(得分:3)
首先,我不认为你想要单位符号。 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")