2017-03-27 43 views
0

*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) 
+0

您可能无法做到。 'ns'看起来像语法,但它实际上是一个叫做“require”的宏。根据你的需要,一些相关的信息可以从'ns-map'和'ns-aliases'函数中获得。 –

+0

谢谢。也许有办法找到当前命名空间的源文件? – Chip

+0

我不认为你可以从命名空间本身,因为它是一个非常动态的东西。但是很多函数都是在源文件中定义的,当它们是关联的var(名称空间条目)时,有一些元数据会告诉你它。所以你可以像 '( - >(vals(ns-publics * ns *))(map(comp:file meta))(到#{})) –

回答

0

事实证明,问这样一个问题产生于“元”命名空间的工作。结合Tawny OWL本体定义,我的应用程序基于Clojure的名称空间思想。为了回答我的问题,我必须在应用程序中创建一个名称空间,并使用它自己的依赖声明。 Substrate命名空间结构就是这样。

相关问题