使 REPL 在编译和加载后最终出现在给定的包中(Common Lisp)



我在depl处使用 (asdf:load-system "app" :force t)来处理一个包含某些软件包定义的ASD文件,并且(asdf:defsystem "app" ...)指定文件:组件:组件。加载后,卧式位于:Cl-user软件包中。您如何改为将替补最终以其他包裹的形式结合起来。在各个地方(例如,ASD或组件)添加(包装:my-pkg)尚未工作。

软件包在加载或编译操作期间更改不更改替补的当前软件包。在正常使用中,这将非常烦人。系统也不会用软件包对应1比1,因此可能没有具有相同名称的软件包,并且系统可能具有多个软件包。但是,为了开发便利,您可以将一个函数添加到Init-File(SBCL的~/.sbclrc),该功能将系统加载并将*PACKAGE*设置为相同名称的软件包。例如,

(require :asdf) ;Quicklisp also requires ASDF, so you could put this after its init too
(defun l (system-name)
  (asdf:load-system system-name)
  (setf *package* (find-package system-name)))

该功能将在CL-USER -Package中。由于这仅用于开发使用,因此可以进行交互处理不存在的系统或软件包的错误。请注意,您应该使用名称而不是字符串的关键字来调用它,或者在调用FIND-PACKAGE之前的名称。

最新更新