¿Cómo enumerar las funciones de un espacio de nombres?

Me gustaría saber cómo enumerar todas las funciones de un espacio de nombres de Clojure. He investigado un poco, pero todavía no he llegado. Ya descubrí cómo enumerar los métodos de una clase Java utilizando el método show:

(show java.awt.Graphics) 

Para enumerar las funciones de un espacio de nombre de Clojure, probé el método de mostrar de esta manera:

 (show 'clojure.contrib.repl-utils) 

Esto muestra algunos métodos de clase de Java, pero no los que estoy buscando como doc y show . ¿Cómo puedo obtener esos?

Normalmente llamo

 (keys (ns-publics 'foo)) 

para enumerar Vars exportados por el espacio de nombres foo ; por ejemplo, para clojure.contrib.monads esto vuelve

 (defmonad censor m-when-not m+write+m maybe-m maybe-t ...) 

(el ... representa mucho más).

De manera más general, hay un conjunto de funciones cuyos nombres comienzan en ns- que enumeran Vars por espacio de nombres, con ciertos criterios adicionales adjuntos:

  1. ns-map : la función más general de todas, devuelve un mapa marcado por símbolos (símbolos no calificados en espacios de nombres en realidad), donde el valor correspondiente a cada símbolo es el Var o la clase a la que se resuelve el símbolo en el espacio de nombres dado.

  2. ns-interns – como ns-map , pero incluye solo los Vars internados en el espacio de nombres dado (a diferencia de Vars de otros espacios de nombres que son accesibles desde el espacio de nombres dado debido a una llamada de use o refer o la referencia implícita de Vars desde clojure.core .

  3. ns-publics – como ns-interns , pero incluye solo los Vars no privados.

  4. ns-imports – like ns-map , pero incluye solo las entradas cuyos valores corresponden a las clases de Java.

También hay ns-aliases que enumeran símbolos que pueden usarse como alias abreviadas al referirse a Vars desde otros espacios de nombres; por ejemplo, si llama (require '[clojure.contrib.math :as math]) , ns-aliases incluirá una entrada con la clave de math (el símbolo), cuyo valor será el espacio de nombre real clojure.contrib.math . Estos mapas no están incluidos en el mapa devuelto por ns-map .

Puedes usar dir . (Quizás esto no estaba disponible cuando se hizo la pregunta por primera vez).

 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 

Echa un vistazo aquí . Más específicamente:

 ;; Sometimes I like to ask which public functions a namespace provides. (defn- ns-publics-list [ns] (#(list (ns-name %) (map first (ns-publics %))) ns)) 

Para aquellos que usan Counterclockwise, hay un “Navegador de Namespace” que se muestra por defecto.

Si no está visible, se puede mostrar a través de la opción de menú:

Ventana> Mostrar vista> Navegador de espacio de nombres

Documentación oficial: http://doc.ccw-ide.org/documentation.html#_namespace_browser_view

Extracto de la documentación oficial:

La vista del navegador del espacio de nombres muestra todos los símbolos de todos los espacios de nombres de la REPL activa. [2]. Le permite pasar a la definición de símbolos en los archivos relevantes (incluidos los archivos internos): simplemente haga doble clic en el nombre del símbolo en la vista del navegador del espacio de nombres.