Normalerweise rufe ich an
(keys (ns-publics 'foo))
Vars auflisten, die vom Namespace exportiert wurden foo
; zB clojure.contrib.monads
dafür kehrt zurück
(defmonad censor m-when-not m+write+m maybe-m maybe-t ...)
(das ...
steht für ziemlich viel mehr).
Im Allgemeinen gibt es eine Reihe von Funktionen, deren Namen in ns-
der Liste Vars nach Namespace beginnen, wobei bestimmte zusätzliche Kriterien beigefügt sind:
ns-map
- Die allgemeinste Funktion von allen gibt eine Karte zurück, die mit Symbolen versehen ist (eigentlich nicht für den Namespace qualifizierte Symbole), wobei der Wert, der jedem Symbol entspricht, der Var oder die Klasse ist, in die das Symbol im angegebenen Namespace aufgelöst wird.
ns-interns
- wie ns-map
, aber enthält nur die Vars internierte im gegebenen Namensraum (wie von anderen Namensräumen zu Vars gegenüber, die von dem gegebenen Namensraum zugänglich sind , aufgrund eines use
oder refer
Anruf oder die impliziten Verweisung von Vars aus clojure.core
.
ns-publics
- wie ns-interns
, enthält aber nur die nicht privaten Vars.
ns-imports
- wie ns-map
, enthält jedoch nur die Einträge, deren Werte Java-Klassen entsprechen.
Es gibt auch ns-aliases
Symbole, die als Kurzform-Aliase verwendet werden können, wenn auf Vars aus anderen Namespaces verwiesen wird. Wenn Sie beispielsweise anrufen (require '[clojure.contrib.math :as math])
, ns-aliases
wird ein Eintrag mit dem Schlüssel math
(dem Symbol) eingefügt, dessen Wert der tatsächliche Namespace ist clojure.contrib.math
. Diese Zuordnung ist nicht in der von zurückgegebenen Zuordnung enthalten ns-map
.
doc
Funktion ein Grund, warum die Bereitstellung von Dokumentation für alte Bibliotheken und andere Pakete keine besonders hohe Priorität hat?Sie können dir verwenden . (Vielleicht war dies nicht verfügbar, als die Frage zum ersten Mal gestellt wurde.)
user=> (dir clojure.string) blank? capitalize escape join lower-case re-quote-replacement replace replace-first reverse split split-lines trim trim-newline triml trimr upper-case nil
quelle
(dir *ns*)
funktioniert nicht,Exception No namespace: *ns* found clojure.core/the-ns (core.clj:3691)
dir
Dokumentation in meiner Antwort folgen , wird in einer Ecke ein Hinweisdir
angezeigt, der darauf hinweist, dass er in Clojure 1.6 eingeführt wurde. Zum Zeitpunkt der Veröffentlichung der Antwort hätte ich diese Informationen möglicherweise einfügen sollen. Zu diesem Zeitpunkt ist Version 1.5 bereits drei Versionen hinter der aktuellen Version. Obwohl es Menschen gibt, die gute Gründe haben, 1,5 oder sogar 1,4 zu verwenden, denke ich, dass diese Fälle selten sind.(dir my-actual-namespace)
in Clojure 1.8 einwandfrei, während ich denNo namespace: *ns*
Fehler erhalte , wenn ich es versuche(dir *ns*)
.dir
gibt nur "öffentliche" Vars zurück ,ns-map
ist für alles.Schauen Sie hier . Genauer:
;; Sometimes I like to ask which public functions a namespace provides. (defn- ns-publics-list [ns] (#(list (ns-name %) (map first (ns-publics %))) ns))
quelle
Für diejenigen, die gegen den Uhrzeigersinn arbeiten, gibt es einen "Namespace-Browser", der standardmäßig angezeigt wird.
Wenn nicht sichtbar, kann es über die Menüoption angezeigt werden:
Offizielle Dokumentation: http://doc.ccw-ide.org/documentation.html#_namespace_browser_view
Auszug aus der offiziellen Dokumentation:
quelle