我想知道如何列出Clojure命名空间的所有函数。我做了一些研究,但我还没有。我已经找到了如何使用show方法列出Java类的方法:
(show java.awt.Graphics)
要列出Clojure命名空间的功能,我尝试过这样的show方法:
(show 'clojure.contrib.repl-utils)
这显示了一些Java类方法,但不是我正在寻找的方法,如doc
和show
。我怎么能得到那些?
答案 0 :(得分:82)
我通常打电话
(keys (ns-publics 'foo))
列出名称空间foo
导出的Vars;例如对于clojure.contrib.monads
,这将返回
(defmonad censor m-when-not m+write+m maybe-m maybe-t ...)
(...
代表了更多)。
更一般地说,有一堆函数,其名称以ns-
开头,按名称空间列出Vars,并附加了某些附加条件:
ns-map
- all的最通用函数,返回一个由符号键入的映射(实际上是非命名空间限定符号),其中每个符号对应的值是Var或类符号解析为给定的命名空间。
ns-interns
- 与ns-map
类似,但仅包含在给定命名空间中实施的Vars(而不是来自其他命名空间的Vars,这些命名空间可以从给定的命名空间访问,因为{{ 1}}或use
来自refer
的Vars的隐式推介。
clojure.core
- 与ns-publics
类似,但仅包含非私人Vars。
ns-interns
- 与ns-imports
类似,但仅包含其值与Java类对应的条目。
还有ns-map
列出了当从其他名称空间引用Vars时可用作速记别名的符号;例如如果您致电ns-aliases
,(require '[clojure.contrib.math :as math])
将包含密钥为ns-aliases
(符号)的条目,其值将为实际名称空间math
。这些映射不包含在clojure.contrib.math
返回的地图中。
答案 1 :(得分:56)
您可以使用dir。 (当问题第一次提出时,这可能不可用。)
user=> (dir clojure.string)
blank?
capitalize
escape
join
lower-case
re-quote-replacement
replace
replace-first
reverse
split
split-lines
trim
trim-newline
triml
trimr
upper-case
nil
答案 2 :(得分:6)
看看here。更具体地说:
;; Sometimes I like to ask which public functions a namespace provides.
(defn- ns-publics-list [ns] (#(list (ns-name %) (map first (ns-publics %))) ns))
答案 3 :(得分:0)
对于那些使用逆时针的用户,默认显示“命名空间浏览器”。
如果看不到,可以通过菜单选项显示:
窗口>显示视图>命名空间浏览器
官方文件: http://doc.ccw-ide.org/documentation.html#_namespace_browser_view
摘自官方文件:
命名空间浏览器视图显示所有命名空间的所有符号 活跃的REPL。[2]。它允许您跳转到的定义 相关文件中的符号(包括内部罐子):只是 双击命名空间浏览器视图中的符号名称。