emacs clojure doc classnotfoundexception

emacs - ¿Cómo usar la función doc de clojure?



classnotfoundexception (3)

Agregue lo siguiente a su archivo Leiningen user.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 por esto. Tenga en cuenta también que la respuesta de Phil Hagelberg que señala que la mayoría de las funciones específicas de REPL se puede acceder directamente en Emacs / Slime sin necesidad de las funciones directamente en REPL.

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

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)

Yo 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 una var? y como se sugiere:

(clojure.repl/doc doc)

Pero luego, 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.

ACTUALIZAR

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


Debes obtener el espacio de nombre clojure.repl de una forma u otra:

Desde el REPL

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

o en tu programa

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


A partir de Lein 2, los espacios de nombres se pueden importar automáticamente al inicio utilizando :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 vea otras respuestas para los equivalentes de SLIME.

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