How to list the functions of a namespace?

I would like to know how to list all functions of a Clojure namespace. I've done some research but I'm not there yet. I already found out how to list the methods of a Java class using the show method:

(show java.awt.Graphics)

To list the functions of a Clojure namespace I've tried the show method like this:

(show 'clojure.contrib.repl-utils)

This shows some Java class methods, but not the ones I'm looking for like doc and show. How can I get those?

26581 次浏览

看看 给你。更具体地说:

;; Sometimes I like to ask which public functions a namespace provides.
(defn- ns-publics-list [ns] (#(list (ns-name %) (map first (ns-publics %))) ns))

I normally call

(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——最常用的函数,返回一个由符号(实际上是非名称空间限定的符号)键控的映射,其中与每个符号对应的值是符号在给定名称空间中解析的 Var 或类。

  2. ns-interns -- like ns-map, but includes only the Vars interned in the given namespace (as opposed to Vars from other namespaces which are accessible from the given namespace due to a use or refer call or the implicit referral of Vars from clojure.core.

  3. ns-interns类似,但只包括非私有的 Vars。

  4. ns-imports -- like ns-map, but includes only the entries whose values correspond to Java classes.

还有 ns-aliases,它列出了一些符号,当从其他名称空间引用 Vars 时,这些符号可以作为简写别名使用; 例如,如果你调用 (require '[clojure.contrib.math :as math])ns-aliases将包含一个键为 math(符号)的条目,其值将是实际的名称空间 clojure.contrib.math。这些映射不包括在 ns-map返回的映射中。

您可以使用 导演(也许在第一次提出问题时还没有这个选项)

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

对于那些使用逆时针方向的用户,默认显示一个“命名空间浏览器”。

如果不可见,可以通过菜单选项显示:

窗口 > 显示视图 > 命名空间浏览器

官方文件: http://doc.ccw-ide.org/documentation.html#_namespace_browser_view

正式文件节录如下:

The Namespace Browser View displays all symbols of all namespaces of 活动的 REPL [2]。它允许您跳转到 相关文件(包括罐子内部)中的符号: 在命名空间浏览器视图中双击符号名称。