【发布时间】:2017-03-27 21:13:25
【问题描述】:
*ns* 返回一个命名空间,而不是命名空间声明。 clojure.tools.namespace.parse.deps-from-ns-decl 需要声明。有很多方法可以从文件中读取声明。如何从当前命名空间 (*ns*) 中获取声明。如果这有帮助,这就是 REPL 的建议:
(deps-from-ns-decl *ns*)
IllegalArgumentException Don't know how to create ISeq from: clojure.lang.Namespace clojure.lang.RT.seqFrom (RT.java:542)
【问题讨论】:
-
你可能做不到。
ns看起来像语法,但它实际上是一个宏,它在内部调用了require之类的东西。根据您的需要,可以从ns-map和ns-aliases函数中获得一些相关信息。 -
谢谢。或许有办法找到当前命名空间的源文件?
-
我不认为你可以从命名空间本身,因为它真的是一个非常动态的东西。但是许多函数是在源文件中定义的,当它们是关联的 var(命名空间条目)时,会有一些元数据告诉你它。所以你可以做类似
(->> (vals (ns-publics *ns*)) (map (comp :file meta)) (into #{})) -
@RussellMull 谢谢。
标签: clojure namespaces