2010-01-06 7 views
7

Existe-t-il un moyen de voir ce qui a déjà été défini dans une session clojure (équivalent à appeler ls())? Disons que je crée quelques objets:Espace de noms Clojure: méthode pour voir les objets définis?

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

Y at-il une commande qui peut être exécuté pour me montrer que ceux-ci existent maintenant dans l'espace de noms d'utilisateur?

Répondre

18

Je fais toutes les affectations dans l'espace de nom d'utilisateur.

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

;; Pour voir tous les mappages de stagiaires publics dans l'espace de noms utilisateur.

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

Maintenant, nous allons définir une fonction non publique

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

Lorsque vous appelez ns-publics fonction. Il ne montrera pas la fonction foobar dans les mappages.

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

Pour voir les mappages internes de l'espace de noms. Utilisez (VOTRE-NAMESPACE de ns-interns)

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

Oh, c'est pour ça que 'ns-interns' est pour! +1 mais je n'ai plus de voix;) –

7

Peut-être ns-publics?

Renvoie une carte des mappages de stagiaires publics pour l'espace de noms.

ou ns-map?

Renvoie une carte de tous les mappages pour l'espace de noms.


Si je comprends bien, il n'y a pas « environnement mondial, » il n'y a que des espaces de noms. Bien sûr, celui que vous êtes actuellement "dans" ressemble à un "environnement global" à des fins pratiques.

+0

+ Merci! C'est très utile. – Shane