¿Cómo usar la función clojure doc?


Estoy empezando con Clojure y no puedo acceder a la función doc.

Estoy usando clojure 1.3 con emacs24 y swank-clojure.

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

Pero cuando lo intento:

(doc doc)

Obtengo:

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

He leído Por qué REPL trata a clojure.core / doc como var? y como se sugiere:

(clojure.repl/doc doc)

Pero entonces, recibo:

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

Parece que no estoy" importando " los espacios de nombres habituales, pero realmente no sabe cómo hacerlo se.

Gracias.

ACTUALIZACIÓN

Usando clojure desde java (java-jar ...) funciona bien, por lo que es un problema con la configuración de emacs.

Author: Community, 2011-12-01

3 answers

Necesitas agarrar el clojure.repl namespace de una manera u otra:

Del REPL

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

O, en su programa

(ns foobar
  (:use [clojure.repl]))
 52
Author: Julien Chastang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-30 20:55:23

Añada lo siguiente a su usuario de Leiningen.archivo clj (en Mac / Linux, es~/.lein/usuario.clj):

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

Esto hará que Leiningen importe automáticamente esos dos espacios de nombres al inicio para proyectos que usen Clojure 1.3.0 y posteriores (pero no para proyectos que usen Clojure 1.2.1 o anteriores, donde doc y source siempre estaban disponibles).

El crédito es para Matthew Boston por esto. Nótese también la respuesta de Phil Hagelberg que señala la mayor parte de los la funcionalidad es accesible directamente en Emacs / Slime sin necesidad de las funciones directamente en el REPL.

 14
Author: Sean Corfield,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-29 16:58:55

A partir de Lein 2, los espacios de nombres se pueden importar automáticamente al inicio usando :injections, por ejemplo:

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

Pero ver otras respuestas para los equivalentes de LIMO.

No estoy seguro de cuándo se convirtió en el caso, pero a partir de lein 2.2 doc está disponible en el repl por defecto.

 4
Author: Joffer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-15 12:18:48