2016-07-25 1 views
2

Il y a un comportement étrange et très ennuyeux, pour ne pas dire long, dans le REPL de lein. En d'autres termes, si j'utilise: reload-all avec un espace de noms, et qu'un espace de nommage requis par lui a une erreur, le repl ne m'en dit rien. Il ne prend que la dernière version valide de cet espace de noms et ne m'informe pas qu'il l'a fait.Clojure repl - comment puis-je m'assurer que: reload-all recharge effectivement tous les espaces de noms requis?

Évidemment, dans la plupart des cas, ceci est extrêmement insatisfaisant. Parce que je n'utiliserais pas: reload-all si aucun des espaces de noms requis n'avait changé, et s'ils le faisaient et contenaient une erreur, j'aimerais beaucoup le savoir, et ne pas me demander soudainement pourquoi le code que j'exécute le REPL semble faire quelque chose de complètement différent du code que j'ai sur mon écran.

Existe-t-il un moyen de forcer ce comportement?

Répondre

4

tools.namespace bibliothèque peut vous aider.

Il existe known issues avec code de rechargement via (require ... :reload) ou (require ... :reload-all). Par conséquent, au lieu de require, essayez d'utiliser clojure.tools.namespace/refresh:

user> (clojure.tools.namespace.repl/refresh) 

Il va scanner votre projet pour les fichiers/namespaces qui ont changé et les recharger et leurs dépendances dans le bon ordre.

refresh sera report about errors dans les espaces de noms dépendants lors du rechargement.

En outre, lisez environ requirements pour que votre code utilise cette bibliothèque et potential issues.

+0

Très soigné, ma vie est beaucoup plus facile. Merci! – UncleBob

+0

On dirait que c'est maintenant 'clojure.tools.namespace.repl/refresh' –

+0

@GordonGustafson c'est vrai, merci. mis à jour la réponse – OlegTheCat