0

我从 slime repl 中得到以下信息(没有找到 clojure.contib 函数):

M-X slime
user=> (:require 'clojure.contrib.string)
nil
user=> (doc clojure.contrib.string/blank?)
java.lang.Exception: Unable to resolve var: clojure.contrib.string/blank? in this context (NO_SOURCE_FILE:10)

从控制台启动 clojure 时会出现以下内容(但这里一切正常):

adr@~/clojure/cloj-1.2$ java -cp /home/adr/clojure/cloj-1.2/clojure.jar:/home/adr/clojure/cloj-1.2/clojure-contrib.jar -server clojure.main
user=> (:require 'clojure.contrib.string)
nil
user=> (doc clojure.contrib.string/blank?)
-------------------------
clojure.contrib.string/blank?
([s])
  True if s is nil, empty, or contains only whitespace.
nil

在我的 .emacs 中,我有以下内容:

(setq inferior-lisp-program "java -cp /home/adr/clojure/cloj-1.2/clojure.jar:/home/adr/clojure/cloj-1.2/clojure-contrib.jar -server clojure.main")

我的 clojure 罐子 (1.2) 位于“/home/adr/clojure/cloj-1.2”。

我是emacs的新手,一直在学习一些教程。一段时间以来,我一直在尝试使用 Emacs 的 clojure.contrib 库,但是“MX slime”没有找到 clojure.contrib。请帮忙

编辑:如果这有帮助,现在我看到使用 MX slime 时有一条消息:

(progn (load "/home/adr/.emacs.d/elpa/slime-20100404/swank-loader.lisp" :verbose t) (funcall (read-from-string "swank-loader:init")) (funcall (read-from-string "swank:start-server") "/tmp/slime.4493" :coding-system "iso-latin-1-unix"))

Clojure 1.2.0
user=> java.lang.Exception: Unable to resolve symbol: progn in this context (NO_SOURCE_FILE:1)

Edit2:但是,如果我在目录中启动“lein swank”后使用 MX slime-connect,则不会出现此类错误消息(尽管即使以“MX slime-connect”开头,在 REPL 中也找不到 clojure-contrib 库(尽管它们是由 leiningen 作为依赖项下载的))。

4

2 回答 2

1

这一行:

(progn (load "/home/adr/.emacs.d/elpa/slime-20100404/swank-loader.lisp" :verbose t) (funcall (read-from-string "swank-loader:init")) (funcall (read-from-string "swank:start-server") "/tmp/slime.4493" :coding-system "iso-latin-1-unix"))

是Common Lisp,不是Clojure,但是既然你设置inferior-lisp-program成Clojure,slime就不能启动swank服务器了。

请参阅swank-clojure 项目中的以下部分:

  • 与 SLIME 连接
  • 嵌入
  • swank-clojure.el

您想要的功能可能在swank-clojure.el中,但不再推荐。

由于您已经在使用 ELPA:

add-to-list 'package-archives
         '("technomancy" . "http://repo.technomancy.us/emacs/") t)

M-x package-install ;(slime-repl)
M-x slime-connect
于 2010-11-28T20:03:17.413 回答
1

在我看来,我使用错误的方式在 REPL 中“要求”库(由于我对 clojure 缺乏经验);当使用如下语法时:

user=> (require 'clojure.contrib.string)
nil
user=> (clojure.contrib.string/blank? "asd")
false

发现所有库都正常(无论是使用“MX slime”用于非 swank REPL 还是“MX slime-connect”用于 swank 服务器)。所以这完全是我的错误(我在这个stackoverflow答案中找到了关于我的错误的提示:为什么我在运行时会出错(使用'clojure.contrib.repl-utils)?

于 2010-11-29T09:45:07.133 回答