【发布时间】:2015-08-27 10:53:00
【问题描述】:
如果我有一个正在运行的 REPL,我可以打印出所有已定义的符号吗?有什么方法可以知道我正在使用的 REPL 中定义了什么?
【问题讨论】:
标签: clojure read-eval-print-loop
如果我有一个正在运行的 REPL,我可以打印出所有已定义的符号吗?有什么方法可以知道我正在使用的 REPL 中定义了什么?
【问题讨论】:
标签: clojure read-eval-print-loop
为了能够知道您的 REPL 的命名空间中定义了哪些符号,请使用以下代码:
(keys (ns-publics 'my-name-space))
这个答案来自这个 Stackoverflow 帖子。 How to list the functions of a namespace?
使用下面的代码打印到字符串。
(pr-str (keys (ns-publics 'my-name-space)))
下面是一个完整的例子,以 LightTable 的截图形式。
【讨论】:
还有dir 宏,用于列出命名空间:
user=> (dir user)
nil
user=> (def x :a)
#'user/x
user=> (dir user)
x
nil
user=> (dir clojure.core)
*
*'
*1
*2
*3
*agent*...
【讨论】:
首先,你需要找到所有的命名空间:
(all-ns)
然后,您必须决定要收集什么。例如,documentation on namespaces 列出了以下用于检查命名空间的函数:
例如,你可以有这样的所有实习生映射:
(reduce conj (map ns-interns (all-ns)))
【讨论】: