是否有一种惯用的方法来获取可用的命名空间?
(all-ns)
仅返回已使用的命名空间。 (Package/getPackages)
返回import
可用的所有Java包,但仅返回已使用的Clojure命名空间。
然后我偶然发现this post,但它使用了一些类路径魔法。
所以如果我在类路径上有clojure.jar和contrib.jar,我希望得到类似('clojure.core 'clojure.set ... 'clojure.contrib.accumulators 'clojure.contrib.condition ...)
的内容,但我还没有使用过任何东西。
答案 0 :(得分:9)
你需要做“classpath magic”。由于没有任何类型的注册表,您必须遍历类路径并查看每个clojure源文件以确定可用的命名空间。 (如果文件不是AOT编译的。否则你需要一个不同的启发式。)
我认为链接帖子中使用的功能是最好的方法:clojure.contrib.find-namespaces/find-namespaces-on-classpath
。
自Clojure 1.3.0以来已弃用;现在使用来自http://github.com/clojure/java.classpath的clojure.tools.namespace.find / find-namespaces和clojure.java.classpath / classpath
答案 1 :(得分: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)