xea*_*its 1 namespaces clojure
根据文档 dir列出的只有"公共"变量.实际上,它并没有显示出来,并且可能在当前命名空间中不可用:
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)
Run Code Online (Sandbox Code Playgroud)
还存在哪些其他(非公开)类型的名称/变量?(这些可能是Java类型?)如何列出这些非公开名称?它们如何在启动时导入命名空间(或某些"默认情况"命名空间)?如何在运行时搜索默认名称空间?
例如,在Python中:dir()列出当前命名空间中的所有内容,如果未找到引用的变量,则在其中进行检查dir(__builtins__).
这个问题已在这里得到解答.您可以使用以下命令列出命名空间中的所有公共变量:
(keys (ns-publics 'foo))
Run Code Online (Sandbox Code Playgroud)
还有像python这样的dir函数,所以你可以这样做:
(clojure.repl/dir foo)
Run Code Online (Sandbox Code Playgroud)
编辑
如果你真的想看到私人,你可以这样做:
(defn ns-all-vars[n]
(filter (fn[[_ v]]
(and (instance? clojure.lang.Var v)
(= n (.getName (.ns v)))))
(ns-map n)))
Run Code Online (Sandbox Code Playgroud)
然后简单地打电话
(println (map first (ns-all-vars 'foo)))
Run Code Online (Sandbox Code Playgroud)
打印'foo命名空间中的所有符号.
| 归档时间: |
|
| 查看次数: |
348 次 |
| 最近记录: |