2011-11-30 8 views
32

Estoy empezando con Clojure y no puedo acceder a la función de doc.¿Cómo usar la función doc de clojure?

Estoy usando clojure 1.3 con emacs24 y swank-clojure.

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

Pero cuando intento:

(doc doc) 

me sale:

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

he leído Why does REPL treat clojure.core/doc as a 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 sé cómo hacerlo.

Gracias.

ACTUALIZACIÓN

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

+0

'(doc doc)' funciona bien en mi carrera Clojure como 'java -jar clojure-1.3.0.jar'. ¿Intentó usarlo de esta manera? – Jan

+0

Sí, utilizar clojure directamente desde Java funciona bien, por lo que parece que es un problema con la configuración de mi emacs. Gracias por responder. – zaforas

+1

Si está utilizando SLIME de Emacs, las cosas de clojure.repl no se cargan en su REPL porque SLIME ya proporciona equivalentes, por ejemplo, puede obtener documentos con [Cc Cd d] (http: // common-lisp .net/project/slime/doc/html/Documentation.html # Documentation) –

Respuesta

49

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

Desde el REPL

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

o en su programa de

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

Sí. (use 'clojure.repl) trabajado. ¡Gracias! – zaforas

+0

¡Una respuesta agradable, funciona para mí! El OP y un comentario me hacen pensar que es un problema de versión: ¿es este el caso? –

+1

¿El espacio de nombre 'clojure.repl' no se usa automáticamente en una sesión de repliegue? ¿Me estoy perdiendo de algo? –

14

Añadir lo siguiente a su usuario Leiningen archivo .clj (en Mac/Linux, es ~/.lein/user.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 usan Clojure 1.3.0 y posterior (pero no para proyectos que usan Clojure 1.2.1 o anterior, donde el documento y la fuente siempre estuvieron disponibles).

El crédito va a Matthew Boston para esto. Tenga en cuenta también Phil Hagelberg's reply que señala que la mayoría de la funcionalidad específica de REPL es accesible directamente en Emacs/Slime sin necesidad de las funciones directamente en el REPL.

+1

Hay un error tipográfico en la respuesta de Phil: el comando correcto de documentación SLIME es [C-c C-d d] (http://common-lisp.net/project/slime/doc/html/Documentation.html#Documentation). (Además, puede ahorrarle a alguien cierta frustración saber que user.clj ha quedado obsoleto en las versiones recientes de Leiningen). –

+0

Ejecutando [sidra] (https://github.com/clojure-emacs/cider) con '* clojure- version * '' {: major 1,: minor 5,: incremental 1,: qualifier nil} 'y solo' Cc Cd' es necesario para comenzar a ingresar el nombre de la función para obtener ayuda. En realidad, esto se describió al final de este [tutorial] (http://clojure-doc.org/articles/tutorials/emacs.html), pero fue precedido por la forma más antigua, que ya no funciona, de obtener el documento. – nymo

4

A partir de Lein 2, espacios de nombres pueden ser importados automáticamente al iniciar el uso de :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.

estoy seguro de cuándo esto se convirtió en el caso, pero a partir de 2,2 Lein doc está disponible en el repl por defecto.

Cuestiones relacionadas