- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 Emacs 作为我的 Common Lisp(准确地说是 SBCL)编辑器,并使用 SLIME。我按照说明设置了 Quicklisp here ,并检查它是否在 SLIME 之外工作,一切都很好 - 我可以抓取并下载代码,包括它,一切。
现在,我尝试使用 Emacs 中的“编译/加载文件”命令来获取顶部包含以下内容的源文件:
(ql:quickload "priority-queue")
(defpackage :tournament
(:use :cl :priority-queue))
(in-package :tournament)
现在,再一次,不是在 SLIME 中,这工作得很好。但是,在 SLIME 中,我收到以下形式的错误:
The name "PRIORITY-QUEUE" does not designate any package.
[Condition of type SB-KERNEL:SIMPLE-PACKAGE-ERROR]
当然还有回溯。我是否遗漏了一些特别的东西?我使用 Emacs 中的 package-install
安装了 slime,并且我的 .emacs 文件中有以下代码来进行设置:
(setq inferior-lisp-program "/usr/local/bin/sbcl")
(require 'slime)
(slime-setup)
最佳答案
发生这种情况是因为编译和加载时间不同。
编译时,不会评估普通函数调用(例如ql:quickload
)。当编译器尝试处理 defpackage
形式(这不是一个普通的函数调用,而是一个在编译时有副作用的宏)时,加载的函数“priority-queue”尚未被调用,包不可用。
如果您加载文件而不是编译和加载,您将不会看到此内容,因为加载会在加载时评估每个表单。
有几个可用选项。最简单的方法是将您对 ql:quickload
的调用包装在 eval-when
中,例如
(eval-when (:compile-toplevel :load-toplevel :execute)
(ql:quickload "priority-queue"))
我更喜欢为我的项目定义一个系统,无论多么小,所以我会创建一个如下所示的锦标赛.asd 文件:
(asdf:defsystem #:tournament
:depends-on (#:priority-queue)
:serial t
:components ((:file "tournament.lisp")))
我将其放入 ~/quicklisp/local-projects/tournament/(与锦标赛.lisp 一起)并在 repl 中使用 (ql:quickload "tournament")
来开始并加载它。
我经常使用后一种设置,因此我编写了一个名为 quickproject 的 Lisp 程序来为我做这件事。 .
关于emacs - SLIME 和 Quicklisp 相处得不好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23676072/
我有一个 Controller 需要从配置服务器刷新配置,因此我在其上添加了@RefreshScope。同时这个 Controller 需要调用后端API,以便我定义restTemplate Bean
我是一名优秀的程序员,十分优秀!