如何使用clojure doc功能?

zaf*_*ras 36 emacs doc clojure classnotfoundexception

我刚开始使用Clojure而无法访问doc函数.

我正在使用clojure 1.3和emacs24以及swank-clojure.

user> *clojure-version*
{:major 1, :minor 3, :incremental 0, :qualifier nil}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试:

(doc doc)
Run Code Online (Sandbox Code Playgroud)

我明白了:

Unable to resolve symbol: doc in this context
[Thrown class java.lang.RuntimeException]
Run Code Online (Sandbox Code Playgroud)

我读过为什么REPL将clojure.core/doc视为var?并按照建议:

(clojure.repl/doc doc)
Run Code Online (Sandbox Code Playgroud)

但接着,我收到:

clojure.repl
[Thrown class java.lang.ClassNotFoundException]
Run Code Online (Sandbox Code Playgroud)

我似乎并没有"导入"通常的命名空间,但实际上并不知道该怎么做.

谢谢.

UPDATE

使用java中的clojure(java -jar ...)它运行良好,所以这是emacs设置的问题.

Jul*_*ang 56

您需要以某种方式获取clojure.repl命名空间:

来自REPL

user> (use 'clojure.repl)
user> (doc doc)
Run Code Online (Sandbox Code Playgroud)

或者在你的程序中

(ns foobar
  (:use [clojure.repl]))
Run Code Online (Sandbox Code Playgroud)

  • Goran,这取决于REPL的启动方式. (3认同)

Sea*_*eld 15

将以下内容添加到Leiningen user.clj文件中(在Mac/Linux上,它是〜/ .lein/user.clj):

;; ~/.lein/user.clj
(if (>= (.compareTo (clojure-version) "1.3.0") 0)
  (do (use 'clojure.repl)
      (use 'clojure.java.javadoc)))
Run Code Online (Sandbox Code Playgroud)

这将导致Leiningen在启动时为使用Clojure 1.3.0及更高版本的项目自动导入这两个名称空间(但不适用于使用Clojure 1.2.1或更早版本的项目 - 其中doc和source始终可用).

幸得马修波士顿这一点.另请注意,Phil Hagelberg的回复指出大多数特定于REPL的功能可直接在Emacs/Slime中访问,而无需直接在REPL中使用这些功能.