【发布时间】:2017-10-15 18:40:19
【问题描述】:
如果我有一个命名空间符号,例如'clojure.core 或 clojure 源文件的路径如何获取命名空间的所有新符号,即不是 :refer-ed 或实习在另一个命名空间中?
这些符号将来自顶级defs(和defns),但也来自let 绑定等。我的目标是分析命名空间并有效地遍历树,根据谓词对某些符号进行查找替换。
编辑:我不只是在寻找顶级变量,我在寻找任何符号。如果有一个带有 let 绑定的函数,我正在寻找被绑定的符号。
【问题讨论】:
-
您可能想要使用 clojure.tools.analyzer 而不是自己走树。作为tree walk的一部分,它应该能够告诉你符号来自哪里,所以无论如何你都不需要这个收集“新”符号的初步步骤。
-
见stackoverflow.com/a/19664649/1455243。您的问题与how to list functions of a namespace 不完全相同,但该答案中的
dir可以满足您的要求,它会出现。 -
不完全是,dir 不会像 let 绑定那样得到 var 范围内的非实习符号
标签: clojure namespaces