How to use clojure doc function?
我只是从Clojure开始,无法访问doc函数。
我正在将clojure 1.3与emacs24和swank-clojure一起使用。
1 2 | user> *clojure-version* {:major 1, :minor 3, :incremental 0, :qualifier nil} |
但是当我尝试:
1 | (doc doc) |
我得到:
1 2 | Unable to resolve symbol: doc in this context [Thrown class java.lang.RuntimeException] |
我已经阅读了为什么REPL会将clojure.core / doc视为var? 并建议:
1 | (clojure.repl/doc doc) |
但是然后,我收到:
1 2 | clojure.repl [Thrown class java.lang.ClassNotFoundException] |
看来我不是在"导入"常用的名称空间,但实际上不知道该怎么做。
谢谢。
更新
使用java中的clojure(java -jar ...)效果很好,因此emacs设置存在问题。
您需要以一种或另一种方式获取clojure.repl命名空间:
来自REPL
1 2 | user> (use 'clojure.repl) user> (doc doc) |
或在您的程序中
1 2 | (ns foobar (:use [clojure.repl])) |
将以下内容添加到您的Leiningen user.clj文件中(在Mac / Linux上为?/ .lein / user.clj):
1 2 3 4 | ;; ~/.lein/user.clj (if (>= (.compareTo (clojure-version)"1.3.0") 0) (do (use 'clojure.repl) (use 'clojure.java.javadoc))) |
对于使用Clojure 1.3.0和更高版本的项目,这将导致Leiningen在启动时自动导入这两个名称空间(但对于使用Clojure 1.2.1或更早版本的项目,则不会导入该名称空间-在此文档和源始终可用)。
这要归功于Matthew Boston。还请注意,Phil Hagelberg的答复指出大多数REPL特定功能可以在Emacs / Slime中直接访问,而无需直接在REPL中使用。
从Lein 2开始,可以在启动时使用
1 2 3 4 5 6 7 | ;; ~/.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)] }} |
但是,请参阅有关SLIME等效项的其他答复。 strike>
我不确定这种情况何时发生,但是默认情况下,从lein 2.2开始,repl默认可用。