你怎么知道在clojure REPL环境中加载了什么?

时间:2015-08-27 10:53:01

标签: clojure read-eval-print-loop

如果我有一个正在运行的REPL,我可以打印出已定义的所有符号吗?有没有办法知道我在REPL中定义的内容?

3 个答案:

答案 0 :(得分:1)

为了能够知道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截图形式的完整示例。

enter image description here

答案 1 :(得分:0)

首先,您需要找到所有名称空间:

(all-ns)

然后,您必须决定要收集的内容。例如,documentation on namespaces列出了以下用于检查命名空间的函数:

例如,您可以拥有这样的所有实习生映射:

(reduce conj (map ns-interns (all-ns)))

答案 2 :(得分:0)

还有dir宏来列出命名空间:

user=> (dir user)
nil
user=> (def x :a)
#'user/x
user=> (dir user)
x
nil
user=> (dir clojure.core)
*
*'
*1
*2
*3
*agent*...