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

How do you know what has been loaded in a clojure REPL environment?

如果我有一个运行 REPL,我可以打印出所有已经定义的符号吗?有什么方法可以知道我正在使用的 REPL 中定义了什么?

为了能够知道在 REPL 的命名空间中定义了哪些符号,请使用以下代码:

    (keys (ns-publics 'my-name-space))  

这个答案来自这个 Whosebug post。 How to list the functions of a namespace?

使用下面的代码打印到字符串。

    (pr-str (keys (ns-publics 'my-name-space)))

以下是 LightTable 屏幕截图形式的完整示例。

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

(all-ns)

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

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

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

还有 dir 宏,用于列出命名空间:

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