2010-01-06 12 views
7

¿Hay alguna manera de ver lo que ya se ha definido en una sesión de clojure (equivalente a llamar a ls())? Digamos que puedo crear unos objetos:Espacio de nombres Clojure: ¿método para ver objetos definidos?

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

¿Hay un comando que se puede ejecutar para mostrarme que estos ahora existen en el espacio de nombres de usuario?

Respuesta

18

Estoy haciendo todas las asignaciones en el espacio de nombres de usuario.

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

;; Para ver todas las asignaciones públicas internas en el espacio de nombres de usuario.

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

Ahora vamos a definir una función que no es pública

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

Cuando se llama a la función ns-públicos. No mostrará la función foobar en las asignaciones.

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

Para ver las asignaciones de internos para el espacio de nombres. Use (ns-pasantes 'YOUR-NAMESPACE)

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

¡Oh, eso es para lo que 'ns-interns' es! +1 pero no tengo votos;) –

7

Tal vez ns-publics?

Devuelve un mapa de las asignaciones de pasante público para el espacio de nombres.

o ns-map?

Devuelve un mapa de todas las asignaciones para el espacio de nombres.


lo que tengo entendido, no hay un "entorno global," sólo hay espacios de nombres. Por supuesto, cualquiera en el que se encuentre actualmente "en" parece un "entorno global" para fines prácticos.

+0

+1 ¡Gracias! Eso es muy útil. – Shane

Cuestiones relacionadas