如何使用clojure文档功能?

问题描述:

我刚刚开始使用Clojure,无法访问文档功能。如何使用clojure文档功能?

我使用clojure 1.3与emacs24和swank clojure。

user> *clojure-version* 
{:major 1, :minor 3, :incremental 0, :qualifier nil} 

但是当我尝试:

(doc doc) 

我得到:

Unable to resolve symbol: doc in this context 
[Thrown class java.lang.RuntimeException] 

我读过Why does REPL treat clojure.core/doc as a var?和建议:

(clojure.repl/doc doc) 

但后来,我收到:

clojure.repl 
[Thrown class java.lang.ClassNotFoundException] 

看来我不是“导入”通常的命名空间,但真的不知道该怎么做。

谢谢。

UPDATE

使用从Java(Java的罐子...)Clojure的效果很好,所以它与emacs的设置有问题。

+0

'(doc doc)'在我的Clojure上运行得很好,就像java -jar clojure-1.3.0.jar一样。你有没有试过这样使用它? – Jan

+0

是的,直接从java使用clojure的效果很好,所以它似乎是我的emacs安装程序的问题。谢谢回答。 – zaforas

+1

如果您使用的是Emacs中的SLIME,clojure.repl的东西不会加载到您的REPL中,因为SLIME本身已经提供了等价物 - 例如,您可以使用[Cc Cd d]获得文档(http:// common-lisp .net/project/slime/doc/html/Documentation.html#Documentation) –

你需要抢clojure.repl命名空间这样或那样:

从REPL

user> (use 'clojure.repl) 
user> (doc doc) 

或在你的程序

(ns foobar 
    (:use [clojure.repl])) 
+0

是的。 (使用'clojure.repl)工作。谢谢! – zaforas

+0

不错的答案,适合我! OP和一条评论让我觉得这是一个版本问题 - 这是怎么回事? –

+1

“clojure.repl”命名空间是否在repl会话中自动使用?我错过了什么吗? –

以下内容添加到您的Leiningen用户.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))) 

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

为此,积分为Matthew Boston。另请注意Phil Hagelberg's reply其中指出大多数REPL特定的功能可直接在Emacs/Slime中访问,而无需直接在REPL中执行功能。

+1

Phil的回复中有一个错字:正确的SLIME文档命令是[C-c C-d d](http://common-lisp.net/project/slime/doc/html/Documentation.html#Documentation)。 (另外,它可能会让某些人感到沮丧,知道在最近版本的Leiningen中user.clj已被弃用。) –

+0

使用'* clojure-版本*''{:major 1,:minor 5,:incremental 1,:qualifier nil}'并且只有'Cc Cd'才需要开始输入函数名称以获得帮助。实际上,这是在本教程的底部(http://clojure-doc.org/articles/tutorials/emacs.html)描述的,但是以较早的,不再有效的方式获取文档。 – nymo

作为LEIN 2,命名空间可被自动启动时使用 :injections,e.g进口:

;; ~/.lein/profiles.clj 
{:user {:plugins [[lein-swank "1.4.4"] 
        [lein-noir "1.2.1"] 
        [lein-pprint "1.1.1"]] 
     :injections [(use 'clojure.repl) 
        (use 'clojure.java.javadoc) 
        (use 'clojure.pprint)] }} 

但是参见泥当量其他响应。

我不确定这是怎么回事,但作为lein 2.2 doc默认情况下在repl上可用。