Come elencare le funzioni di un namespace?

Mi piacerebbe sapere come elencare tutte le funzioni di uno spazio dei nomi Clojure. Ho fatto delle ricerche ma non ci sono ancora. Ho già scoperto come elencare i metodi di una class Java usando il metodo show:

(show java.awt.Graphics) 

Per elencare le funzioni di uno spazio dei nomi Clojure ho provato il metodo show in questo modo:

 (show 'clojure.contrib.repl-utils) 

Questo mostra alcuni metodi di class Java, ma non quelli che sto cercando come doc e show . Come posso ottenere quelli?

Io normalmente chiamo

 (keys (ns-publics 'foo)) 

per elencare Vars esportato dal namespace foo ; ad es. per clojure.contrib.monads restituisce questo

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

(il ... distingue molto di più).

Più in generale, ci sono un sacco di funzioni i cui nomi iniziano in ns- che elenca Vars per namespace, con alcuni criteri aggiuntivi allegati:

  1. ns-map – la funzione più generale di tutti, restituisce una mappa con chiavi (simboli non classificati nello spazio dei nomi in realtà), dove il valore corrispondente a ciascun simbolo è il Var o la class a cui il simbolo si risolve nello spazio dei nomi specificato.

  2. ns-interns – come ns-map , ma include solo il Vars internato nello spazio dei nomi dato (al contrario di Vars da altri namespace accessibili dal namespace dato a causa di un call o call di refer o implicito di Vars dal clojure.core .

  3. ns-publics – come ns-interns , ma include solo Vars non privato.

  4. ns-imports – come ns-map , ma include solo le voci i cui valori corrispondono alle classi Java.

Ci sono anche ns-aliases che elenca i simboli che possono essere usati come alias di stenografia quando ci si riferisce a Vars da altri namespace; Ad esempio, se si chiama (require '[clojure.contrib.math :as math]) , gli ns-aliases includeranno una voce con la chiave di math (il simbolo), il cui valore sarà lo spazio clojure.contrib.math nomi effettivo clojure.contrib.math . Queste mappature non sono incluse nella mappa restituita da ns-map .

Puoi usare dir . (Forse questo non era disponibile quando la domanda è stata posta per prima).

 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 

Dai un’occhiata qui . Più specificamente:

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

Per coloro che usano Counterclockwise, c’è un “Namespace Browser” che viene mostrato di default.

Se non visibile, può essere mostrato tramite l’opzione di menu:

Finestra> Mostra vista> Browser dei nomi

Documentazione ufficiale: http://doc.ccw-ide.org/documentation.html#_namespace_browser_view

Estratto dalla documentazione ufficiale:

La vista del browser Namespace mostra tutti i simboli di tutti i namespace del REPL attivo. [2]. Ti permette di passare alla definizione dei simboli nei file rilevanti (inclusi i barattoli interni): basta fare doppio clic sul nome del simbolo nella vista del browser Namespace.