2016-07-25 34 views
2

Es gibt ein merkwürdiges und sehr ärgerliches, um nicht zu sagen zeitraubendes Verhalten in der REPL.Clojure repl - wie kann ich das sicherstellen: reload-all lädt tatsächlich alle benötigten Namespaces?

Nämlich, wenn ich verwende: reload-all mit einem Namespace, und ein Namespace, der von ihm benötigt wird, hat einen Fehler, der Repl sagt mir nichts darüber. Es nimmt nur den letzten gültigen Build des genannten Namespace und informiert mich nicht, dass es dies getan hat.

Offensichtlich ist dies in den meisten Situationen äußerst unbefriedigend. Weil ich nicht: neuladen-alles verwenden würde, wenn keiner der erforderlichen Namespaces sich geändert hätte, und wenn sie einen Fehler hatten und haben, würde ich sehr gerne darüber wissen und mich nicht plötzlich wundern, warum der Code ausgeführt werde Die REPL scheint etwas völlig anderes zu tun als der Code, den ich auf meinem Bildschirm habe.

Gibt es eine Möglichkeit, dieses Verhalten zu erzwingen?

Antwort

4

tools.namespace Bibliothek kann Ihnen helfen.

Es gibt known issues mit Nachladecode über (require ... :reload) oder (require ... :reload-all). Daher statt require, versuchen clojure.tools.namespace/refresh mit:

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

Es scannt Ihr Projekt für Dateien/Namespaces, die geändert wurden und werden sie und ihre Abhängigkeiten in der richtigen Reihenfolge neu zu laden.

refresh wird report about errors in abhängigen Namespaces während des Neuladens.

Lesen Sie auch über requirements für Ihren Code diese Bibliothek und potential issues zu verwenden.

+0

Sehr ordentlich, macht mein Leben sehr viel einfacher. Vielen Dank! – UncleBob

+0

Sieht so aus, als wäre es jetzt 'clojure.tools.namespace.repl/refresh' –

+0

@GordonGustafson das stimmt, danke. aktualisierte die Antwort – OlegTheCat