2010-01-06 3 views
7

Gibt es eine Möglichkeit zu sehen, was bereits in einer Clojure-Sitzung definiert wurde (entspricht dem Aufruf von ls())? Lassen Sie uns sagen, dass ich ein paar Objekte erstellen:Clojure Namespace: Methode, um definierte Objekte zu sehen?

(def x 1) 
(def y 2.2) 
(def plus-one (fn [x] (+ x 1))) 

Gibt es einen Befehl, der ausgeführt werden kann, um mir zu zeigen, dass diese existieren jetzt im Benutzernamensraum?

Antwort

18

Ich mache alle Zuweisungen im User-Namespace.

user> (def *foo 10) 
#'user/*foo 

;; Um alle öffentlichen internen Zuordnungen im Benutzernamespace anzuzeigen.

user> (ns-publics 'user) 
{*foo #'user/*foo} 

Lassen Sie uns nun eine Funktion definieren, die

user> (defn- foobar[x] 
     (println x) 
#'user/foobar 

Wenn Sie anrufen ns Öffentlichkeiten Funktion nicht öffentlich ist. Es wird keine Foobar-Funktion in den Zuordnungen angezeigt.

user> (ns-publics 'user) 
{*foo #'user/*foo} 

Um die internen Zuordnungen für den Namespace zu sehen. Verwenden Sie (Ns-Praktikanten "IHR-NAMESPACE)

user> (ns-interns 'user) 
{foobar #'user/foobar, *foo #'user/*foo} 
+0

Oh, deshalb ist 'ns-internates' da! +1, aber ich habe keine Stimmen mehr;) –

7

Vielleicht ns-publics?

Gibt eine Zuordnung der öffentlichen internen Zuordnungen für den Namespace zurück.

oder ns-map?

Gibt eine Zuordnung aller Zuordnungen für den Namespace zurück.


Wie ich es verstehe, gibt es keine „globale Umwelt“ gibt es nur Namespaces. Natürlich sieht das, was Sie gerade "in" sind, für praktische Zwecke wie eine "globale Umgebung" aus.

+0

+1 Vielen Dank! Das ist sehr hilfreich. – Shane

Verwandte Themen