2010-08-04 19 views
6

वहाँ उपलब्ध नामस्थान कि इस्तेमाल किया जा सकता प्राप्त करने के लिए एक रास्ता है मुहावरेदार प्राप्त करें?उपलब्ध clojure नामस्थान

(all-ns) रिटर्न केवल पहले से ही नामस्थान का इस्तेमाल किया। (Package/getPackages) रिटर्न सभी जावा संकुल import के लिए उपलब्ध है, लेकिन केवल उन Clojure नामस्थान कि पहले से ही किया जाता है।

तब मैं this post पर ठोकर खाई, लेकिन यह कुछ classpath जादू का उपयोग करता है।

तो अगर मैं अपने क्लासपाथ पर clojure.jar और contrib.jar है, तो मैं कुछ ('clojure.core 'clojure.set ... 'clojure.contrib.accumulators 'clojure.contrib.condition ...) प्राप्त करना चाहता हूं, लेकिन मैंने अभी तक कुछ भी उपयोग नहीं किया है।

उत्तर

9

आप "classpath जादू" करने की आवश्यकता होगी। वहाँ रजिस्ट्री का कोई प्रकार है के बाद से, आप classpath चलना और हर clojure स्रोत फ़ाइल में देखने के लिए निर्धारित करने के लिए क्या नामस्थान उपलब्ध हैं करने के लिए है। (यदि फाइल एओटी संकलित नहीं हैं। अन्यथा आपको एक अलग ह्युरिस्टिक की आवश्यकता होगी।)

मुझे लगता है कि लिंक किए गए पोस्ट में उपयोग किया जाने वाला फ़ंक्शन जाने का सबसे अच्छा तरीका है: clojure.contrib.find-namespaces/find-namespaces-on-classpath


क्लोजर 1.3.0 के बाद से बहिष्कृत; अब clojure.tools.namespace.find का उपयोग/लगता है-नामस्थान और clojure.java.classpath/classpath से http://github.com/clojure/java.classpath

2

मैं bultitude पाया है ऐसा करने के लिए एक महान उपकरण हो सकता है।

उदाहरण:

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

मेरे सवाल का सही मेल लग रहा है –