According to docs dir
仅列出“公共(public)”变量。
实际上,它不会显示自己,并且可能在当前命名空间中不可用:
user=> (dir user)
nil
user=>
user=>
user=> (in-ns 'foo)
#<Namespace foo>
foo=>
foo=>
foo=> (dir foo)
CompilerException java.lang.RuntimeException: Unable to resolve symbol: dir in this context, compiling:(NO_SOURCE_PATH:17)
还有哪些其他(非公开)类型的名称/变量存在? (这些可能是 Java 类型?)如何列出这些非公开名称?它们如何在启动时导入到命名空间(或某些“默认案例”命名空间)?如何在运行时搜索默认命名空间?
例如在 Python 中:dir()
列出当前命名空间中的所有内容,如果未找到引用变量,则在 dir(__builtins__)
中进行检查。
最佳答案
这个问题已经有人回答了here .您可以使用以下命令列出命名空间中的所有公共(public)变量:
(keys (ns-publics 'foo))
还有一个dir像 python 一样的功能,所以你可以这样做:
(clojure.repl/dir foo)
编辑
如果你真的也想看私密处,你可以这样做:
(defn ns-all-vars[n]
(filter (fn[[_ v]]
(and (instance? clojure.lang.Var v)
(= n (.getName (.ns v)))))
(ns-map n)))
然后简单地调用
(println (map first (ns-all-vars 'foo)))
打印 'foo 命名空间中的所有符号。
关于clojure:如何列出当前命名空间中可访问的所有名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39562153/