1

我已将此代码片段添加到我的 stumpwmrc 文件中:

(defun load-swank ()
  "Load a swank server"
  (ql:quickload 'swank)
  (require 'swank)
  (setq swank:*use-dedicated-output-stream* nil)
  (setq slime-net-coding-system 'utf-8-unix)
  (swank:create-server :port 4006))
(load-swank)

我期待打开一个套接字服务器,接受“swank”协议。因此我可以用 emacs 连接到它(感谢 Slime)。

但是当我登录并且 stumpwm 正在读取它的配置文件时,这是我得到的错误消息:

15:00:34 Outputting a message:
         ^B^1*Error loading ^b/home/ybaumes/.stumpwmrc^B: ^nThe name "SWANK" does not designate any package.

我该如何解决?我调用'require,甚至'快速加载函数。这里有什么问题?

4

1 回答 1

2

一个典型的错误是这样的:

您加载文件,读者会看到代码:

SWANK 未加载

(defun load-swank ()
  "Load a swank server"

SWANK 未加载

  (ql:quickload 'swank)

SWANK 未加载 - 请记住,我们仍在阅读表单。

  (require 'swank)

SWANK 未加载 - 请记住,我们仍在阅读表单。

现在在包中使用我们一个不存在的符号......读者抱怨:

  (setq swank:*use-dedicated-output-stream* nil)  ; the package SWANK does not exist yet.

  (setq slime-net-coding-system 'utf-8-unix)
  (swank:create-server :port 4006))

现在你要加载 SWANK:

(load-swank)

您不能使用不存在的包中的符号。

例如,在函数内部起作用的是:

(setf (symbol-value (read-from-string "swank:*use-dedicated-output-stream*")) nil)

等等。

您需要在该函数的运行时找到符号。使用(find-symbol "FOO" "SWANK")(记住 Common Lisp 在内部是大写的)或(read-from-string "SWANK::FOO").

于 2014-01-06T14:41:31.617 回答