37 votes

Comment utiliser la fonction clojure doc ?

Je débute avec Clojure et je n'arrive pas à accéder à la fonction doc.

J'utilise clojure 1.3 avec emacs24 et swank-clojure.

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

Mais quand j'essaie :

(doc doc)

J'ai compris :

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

J'ai lu Pourquoi REPL traite-t-il clojure.core/doc comme une var ? et comme suggéré :

(clojure.repl/doc doc)

Mais ensuite, je reçois :

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

Il semble que je n'"importe" pas les espaces de noms habituels, mais je ne sais vraiment pas comment m'y prendre.

Merci.

UPDATE

En utilisant clojure à partir de java (java -jar ...) cela fonctionne bien, donc c'est un problème avec la configuration d'emacs.

58voto

Julien Chastang Points 8357

Vous devez récupérer l'espace de nom clojure.repl d'une manière ou d'une autre :

Depuis le REPL

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

ou dans votre programme

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

15voto

Sean Corfield Points 1580

Ajoutez ce qui suit à votre fichier Leiningen user.clj (sur Mac / Linux, c'est ~/.lein/user.clj) :

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

Ainsi, Leiningen importera automatiquement ces deux espaces de noms au démarrage pour les projets utilisant Clojure 1.3.0 et plus (mais pas pour les projets utilisant Clojure 1.2.1 ou plus - où doc et source étaient toujours disponibles).

Le mérite revient à Matthew Boston pour ça. Notez également Réponse de Phil Hagelberg qui souligne que la plupart des fonctionnalités spécifiques au REPL sont accessibles directement dans Emacs / Slime sans avoir besoin des fonctions directement dans le REPL.

4voto

Joffer Points 547

À partir de Lein 2, les espaces de noms peuvent être automatiquement importés au démarrage en utilisant :injections par exemple

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

Mais voir les autres réponses pour les équivalents SLIME.

Je ne suis pas sûr de la date à laquelle c'est devenu le cas, mais depuis lein 2.2 doc est disponible à la repl par défaut.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X