gpt4 book ai didi

package - 重新定义已删除的包(Common Lisp)

转载 作者:行者123 更新时间:2023-12-04 10:11:53 24 4
gpt4 key购买 nike

我正在使用 delete-package作为在对包文件进行某些编辑后重新加载项目之前,取消保留大量旧(用户指定)变量名称的简单方法。 (否则,新值可以得到 push ed 到最终用户定义的那些变量名称的旧值上。)但是当我在删除后尝试重新加载时,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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com