2 votes

La fonction repl/source ne fonctionne pas en Clojure

Je teste avec des fichiers et non REPL.

Voici mon fichier clj :

tests.my-clj-file.clj

(ns tests.my-clj-file
  (:require [clojure.repl :as repl]))

(defn my-fn
  []
  1)

(println (repl/source my-fn))

La sortie est :

Source introuvable
nil

1voto

user2609980 Points 1104

Il est seulement possible de lire la source des Vars qui sont sur le disque.

Donc, si vous avez évalué le tampon, il est chargé dans le REPL et vous ne pouvez pas voir la source avec source.

Une façon d'accomplir la lecture de la source est de placer my-fn dans un autre fichier (par exemple, /mon_autre_fichier_clj.clj):

(ns mon-autre-fichier-clj)

(defn my-fn
  []
  1)

Ne pas évaluer le tampon.

Ensuite, allez à /tests/mon_fichier_clj.clj et évaluez :

(ns tests.mon-fichier-clj
  (:require [clojure.repl :as repl]
            [autre-fichier :refer [my-fn]))

(println (repl/source my-fn))

Ceci affiche correctement la source.

(defn my-fn
  []
  1)
nil

0voto

Nathan Davis Points 1400

Si vous essayez (doc repl/source), vous obtiendrez quelque chose comme ceci (avec emphase ajoutée) :

Imprime le code source du symbole donné, s'il peut le trouver. Cela nécessite que le symbole résolve à une Var définie dans un espace de noms pour lequel le .clj est dans le classpath.

Donc clojure.repl/source ne fonctionne qu'avec du code qui a été chargé à partir de fichiers source. Cela ne fonctionnera pas si vous saisissez le code dans le REPL (peu importe si le code se trouve dans un fichier).

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