简体   繁体   中英

How to use clojure doc function?

I'm just starting with Clojure and can't access to the doc function.

I'm using clojure 1.3 with emacs24 and swank-clojure.

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

But when I try:

(doc doc)

I get:

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

I've read Why does REPL treat clojure.core/doc as a var? and as suggested:

(clojure.repl/doc doc)

But then, I receive:

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

It seems I am not "importing" the usual namespaces, but really doesn't know how to do it.

Thanks.

UPDATE

Using clojure from java (java -jar ...) it works well, so it's a problem with the emacs setup.

You need to grab the clojure.repl namespace one way or another:

From the REPL

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

or in your program

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

Add the following to your Leiningen user.clj file (on Mac / Linux, it's ~/.lein/user.clj):

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

This will cause Leiningen to automatically import those two namespaces at startup for projects using Clojure 1.3.0 and later (but not for projects using Clojure 1.2.1 or earlier - where doc and source were always available).

Credit goes to Matthew Boston for this. Note also Phil Hagelberg's reply which points out most of the REPL-specific functionality is accessible directly in Emacs / Slime without needing the functions directly in the REPL.

As of Lein 2, namespaces can be automatically imported at startup using :injections , eg:

 
 
 
  
  ;; ~/.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)] }}
 
  

But see other responses for SLIME equivalents.

I'm unsure of when this became the case, but as of lein 2.2 doc is available at the repl by default.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM