in-ns
est l'une des bonnes façons.
Le chemin qui me semble le plus "correct" est de (require '[example.code :as ec])
et de travailler dans l'espace de noms user
au REPL; de cette façon, mon état expérientiel jetable reste en user
et ec/foo
est assez pratique pour moi (et il est évident d'où vient foo
). Vous pouvez toujours dire (require :reload-all 'example.code)
(fonctionne également avec use
) pour forcer la recompilation.
De plus, voici une fonction pour supprimer (de l'espace de noms en cours) tous les mappings tirés depuis un espace de noms donné avec use
:
(defn unuse [ns]
(doseq [[n v] (ns-refers *ns*)]
(if (= (.. v ns name) ns)
(ns-unmap *ns* n))))
En plus de cela, vous pouvez construire
(defn reuse [ns]
(unuse ns)
(remove-ns ns)
(use :reload-all ns))
et dites (reuse 'example.code)
pour obtenir quelque chose près d'un nouveau départ avec votre espace de noms. (Notez que 1.2 de nouvelles fonctionnalités telles que deftype
& defrecord
introduisons quelques complexités ... En particulier, unuse
n'a pas d'effet sur import
classe Ed. - ce qui inclut les dossiers et deftype
types -Création :reload-all
provoque toujours les deftype
formes et al être. recompilé, mais je me souviens avoir frappé des cas bizarres où cela ne semblait pas être suffisant ... Peut-être mon erreur, peut-être un aspect mystérieux de ces caractéristiques que je n'ai pas encore complètement exploré.)
Egalement in-ns est la "bonne façon" de changer d'espace de noms, pas ns. ns est supposé être appelé une seule fois pour configurer l'espace de noms avec tous ses require, use et import. Lorsque cela est fait, in-ns est utilisé pour changer l'espace de noms. – kotarak
vous avez raison, je manque l'in-ns, plus approprié pour le repl – jneira