2010-08-04 13 views
6

Esiste un modo idiomatico per ottenere gli spazi dei nomi disponibili che è possibile utilizzare?Ottieni gli spazi dei nomi clojure

(all-ns) restituisce solo spazi dei nomi già utilizzati. (Package/getPackages) restituisce tutti i pacchetti Java disponibili per import, ma solo quegli spazi dei nomi Clojure già utilizzati.

Quindi ho inciampato su this post, ma utilizza un po 'di magia del classpath.

Quindi voglio ottenere qualcosa come ('clojure.core 'clojure.set ... 'clojure.contrib.accumulators 'clojure.contrib.condition ...) se ho il clojure.jar e contrib.jar sul mio classpath, ma non ho ancora usato nulla.

risposta

9

Avrete bisogno di fare "magia del classpath". Poiché non esiste alcun tipo di registro, è necessario percorrere il classpath e cercare in tutti i file di origine clojure per determinare quali spazi dei nomi sono disponibili. (Nel caso in cui i file non siano compilati AOT, altrimenti sarà necessaria una euristica diversa)

Penso che la funzione utilizzata nel post collegato sia la migliore: clojure.contrib.find-namespaces/find-namespaces-on-classpath.


Obsoleto da Clojure 1.3.0; usa ora clojure.tools.namespace.find/find-namespaces e clojure.java.classpath/classpath da http://github.com/clojure/java.classpath

2

Ho trovato bultitude un ottimo strumento per fare ciò.

Esempio:

user=> (require '[bultitude.core :as b]) 
nil 

user=> (take 10 (b/namespaces-on-classpath)) 
(bultitude.core-test bultitude.core clojure.data clojure.string clojure.test clojure.xml clojure.inspector clojure.repl clojure.set clojure.test.junit) 

user=> (b/namespaces-on-classpath :prefix "bultitude") 
(bultitude.core-test bultitude.core) 
+0

sembra l'ideale per la mia domanda –

Problemi correlati