【问题标题】:Making the REPL end up in a given package after compiling & loading (Common Lisp)在编译和加载后使 REPL 最终出现在给定的包中(Common Lisp)
【发布时间】:2019-08-08 10:21:09
【问题描述】:

我在 REPL 中使用 (asdf:load-system "app" :force t) 来处理包含一些包定义的 ASD 文件,并使用 (asdf:defsystem "app" ...) 指定文件 :components。加载后,REPL 位于 :cl-user 包中。你如何使 REPL 最终出现在不同的包中。在不同的地方(例如,ASD 或组件)添加 (in-package :my-pkg) 无效。

【问题讨论】:

    标签: common-lisp read-eval-print-loop


    【解决方案1】:

    加载或编译操作期间的包更改不会更改 REPL 的当前包。这在正常使用中会很烦人。系统也不和包一一对应,所以可能没有同名的包,系统可能有多个包。然而,为了开发方便,您可以在初始化文件(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 之前将名称字符串大写。

    【讨论】:

    • 我为所需的最终包添加了第二个参数,效果很好。也感谢其他指针。
    猜你喜欢
    • 1970-01-01
    • 2018-10-02
    • 2011-04-03
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多