我想知道如何列出 Clojure 命名空间的所有函数。我已经做了一些研究,但还没有做到这一点。我已经了解了如何使用 show 方法列出 Java 类的方法:
(show java.awt.Graphics)
为了列出 Clojure 命名空间的功能,我尝试了如下所示的 show 方法:
(show 'clojure.contrib.repl-utils)
这显示了一些 Java 类方法,但不是我正在寻找的方法,例如doc
and show
。我怎样才能得到那些?
我通常打电话
(keys (ns-publics 'foo))
列出命名空间导出的变量foo
;例如为了clojure.contrib.monads
这返回
(defmonad censor m-when-not m+write+m maybe-m maybe-t ...)
(the ...
代表更多)。
更一般地说,有很多名称以ns-
它按名称空间列出变量,并附加某些附加条件:
ns-map
-- 最通用的函数,返回一个由符号(实际上是非命名空间限定符号)作为键的映射,其中与每个符号对应的值是符号在给定命名空间中解析为的 Var 或类。
ns-interns
- 喜欢ns-map
,但仅包括给定名称空间中驻留的变量(与来自其他名称空间的变量相反,由于其他名称空间可从给定名称空间访问)use
or refer
调用或隐式引用 Varsclojure.core
.
ns-publics
- 喜欢ns-interns
,但仅包括非私有变量。
ns-imports
- 喜欢ns-map
,但仅包括其值对应于 Java 类的条目。
还有ns-aliases
其中列出了在从其他名称空间引用 Var 时可用作速记别名的符号;例如如果你打电话(require '[clojure.contrib.math :as math])
, ns-aliases
将包含一个密钥为的条目math
(符号),其值将是实际的命名空间clojure.contrib.math
。这些映射不包含在返回的映射中ns-map
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)