2011-11-30 32 views
32

我剛剛開始使用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) –

回答

49

你需要搶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會話中自動使用?我錯過了什麼嗎? –

14

以下內容添加到您的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

4

作爲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上可用。