2016-03-24 9 views

Antwort

1

in dem ers (nur ab clojure) Ich habe folgende ns standardmäßig geladen

user=> (pprint (map #(.getName %) (all-ns))) 
(clojure.edn 
clojure.core.server 
clojure.java.io 
clojure.java.shell 
clojure.core.protocols 
clojure.string 
clojure.java.browse 
clojure.pprint 
clojure.uuid 
clojure.core 
clojure.main 
user 
clojure.java.javadoc 
clojure.repl 
clojure.walk 
clojure.instant) 

in je nachdem, welche Namespace Sie sind, scheint clojure.edn nicht

8

Clojure Programme beginnen an der Spitze zu ladende der " main "namespace (oft project-name.core) und werte jedes Formular von oben nach unten aus. Dies passiert, wenn das Programm startet und bevor irgendwelche "Haupt" -Funktionen aufgerufen werden.

Wenn ein require Ausdruck ausgewertet wird, springt er in diesen Namespace und macht dort dasselbe. Wenn Requests dort auftreten, rekursiert es die Zweige dieser Namespaces, rekursiv lädt jeden Namespace nach Bedarf.

Wenn Sie also nicht explizit angeben, dass Ihr Namespace einen anderen Namespace benötigt, sind Sie der Reihenfolge ausgeliefert, in der andere Namespaces ihre Abhängigkeiten laden. Manchmal wird es funktionieren, und manchmal nicht zusammenhängende Änderungen an der Evalation Reihenfolge Ihrer entfernten Abhängigkeiten wird Ihren Code brechen.

Bitte, bitte, ... erklären Sie Ihre eigenen Anforderungen!

+0

Willst du damit sagen, wenn ich 'clojure.string/ends-with?' Nur einmal in einer Datei benutze, sollte ich '' (clojure.string) 'oben setzen? – glts

+2

Ja! und es ist wahrscheinlicher, dass es oben in der ns-Form im Abschnitt (: require ...) steht. wie folgt: '[clojure.string: refer [ends-with?]]' Das musst du nicht für clojure.core tun, obwohl alles andere eine gute Angewohnheit ist, die denjenigen helfen wird, die in den kommenden Jahren an deinem Code arbeiten habe ein glücklicheres Leben. –

Verwandte Themen