如何列出命名空间的功能?

时间:2010-04-30 19:57:23

标签: clojure

我想知道如何列出Clojure命名空间的所有函数。我做了一些研究,但我还没有。我已经找到了如何使用show方法列出Java类的方法:

(show java.awt.Graphics)

要列出Clojure命名空间的功能,我尝试过这样的show方法:

(show 'clojure.contrib.repl-utils)

这显示了一些Java类方法,但不是我正在寻找的方法,如docshow。我怎么能得到那些?

4 个答案:

答案 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,并附加了某些附加条件:

  1. ns-map - all的最通用函数,返回一个由符号键入的映射(实际上是非命名空间限定符号),其中每个符号对应的值是Var或类符号解析为给定的命名空间。

  2. ns-interns - 与ns-map类似,但仅包含在给定命名空间中实施的Vars(而不是来自其他命名空间的Vars,这些命名空间可以从给定的命名空间访问,因为{{ 1}}或use来自refer的Vars的隐式推介。

  3. clojure.core - 与ns-publics类似,但仅包含非私人Vars。

  4. ns-interns - 与ns-imports类似,但仅包含其值与Java类对应的条目。

  5. 还有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]。它允许您跳转到的定义   相关文件中的符号(包括内部罐子):只是   双击命名空间浏览器视图中的符号名称。