我正在使用delete-package
作为一种简单的方法,在对包文件进行某些编辑后重新加载项目之前,取消大量旧的(用户指定的)变量名。 (否则,新值可以将 push
编辑到最终用户定义的那些变量名称的旧值上。)但是当我尝试在删除后重新加载时,SBCL 会提示。
一次性加载 init.lisp
后设置 Quicklisp、ASDF 并安装一些 Quicklisp 库的文件,然后我使用 (progn (asdf:load-system “my-project”) (in-package :my-package))
加载该项目。 ,其中项目定义my-project.asd
文件包含
(when (find-package :my-package)
(delete-package :my-package))
(defpackage :my-package
(:use :cl))
(asdf:defsystem "my-project"
…)
这在第一次加载时一切正常,但在项目的第二次加载时出错,因为
*PACKAGE* can't be a deleted package:
It has been reset to #<PACKAGE "COMMON-LISP-USER">.
错误从何而来?可以修复它并保留相同的功能吗?
最佳答案
除了工作包之外,还创建一个单独的包来保存用户定义的符号,例如(defpackage :us)
。 (:use :cl)
不是必需的,因为包仅包含数据。加载用户文件时使用 (in-package :us)
安装用户符号,以编程方式将 intern
安装到 :us
中,或者直接引用包前缀。访问带有包前缀的符号。然后 (delete-package :us)
应该可以工作。
关于package - 重新定义已删除的包 (Common Lisp),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61298304/