我想知道如何列出Clojure名称空间的所有功能。我已经做过一些研究,但还没有。我已经发现了如何使用show方法列出Java类的方法:
(show java.awt.Graphics)
为了列出Clojure命名空间的功能,我尝试了如下show方法:
(show 'clojure.contrib.repl-utils)
这显示了一些Java类方法,但没有显示我喜欢的doc
and和show
。我怎么能得到那些?
Answers:
我通常打电话
(keys (ns-publics 'foo))
列出名称空间导出的Vars foo
; 例如clojure.contrib.monads
为此回报
(defmonad censor m-when-not m+write+m maybe-m maybe-t ...)
(...
代表更多)。
更一般而言,有一堆函数的名称以ns-
按名称空间列出Vars的名称开头,并附加了某些附加条件:
ns-map
-最通用的函数,返回由符号(实际上是非命名空间限定的符号)键控的映射,其中与每个符号相对应的值是符号在给定名称空间中解析的Var或类。
ns-interns
-类似ns-map
,但仅包括在给定名称空间中实习的Vars(与其他名称空间的Vars相反,由于use
或refer
调用或从隐式引用Vars,可从给定名称空间访问Vars clojure.core
。
ns-publics
-类似ns-interns
,但仅包含非私有Var。
ns-imports
-类似ns-map
,但仅包括其值对应于Java类的条目。
还有ns-aliases
一个列出了当从其他命名空间引用Vars时可用作速记别名的符号。例如,如果您调用(require '[clojure.contrib.math :as math])
,ns-aliases
将包含一个带有math
(符号)键的条目,其值将是实际的namespace clojure.contrib.math
。这些映射未包含在由返回的映射中ns-map
。
您可以使用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
(dir *ns*)
Exception No namespace: *ns* found clojure.core/the-ns (core.clj:3691)
dir
在我的答案中点击了指向文档的链接,则在一个角落有一个通知,表明这dir
是Clojure 1.6中引入的。在我发布答案时,也许我应该已经包含了该信息。至此,v。1.5已经比当前版本落后三个版本。尽管可能有些人有充分的理由使用1.5甚至1.4,但我认为这种情况很少见。
(dir my-actual-namespace)
在Clojure 1.8中可以正常工作,但No namespace: *ns*
如果尝试运行时会出现错误(dir *ns*)
。
dir
仅返回“ public” vars,ns-map
适用于所有情况。
在这里看看。进一步来说:
;; Sometimes I like to ask which public functions a namespace provides.
(defn- ns-publics-list [ns] (#(list (ns-name %) (map first (ns-publics %))) ns))
对于使用“逆时针”的用户,默认情况下会显示“名称空间浏览器”。
如果不可见,则可以通过菜单选项显示:
窗口>显示视图>命名空间浏览器
官方文件: http //doc.ccw-ide.org/documentation.html#_namespace_browser_view
摘自官方文件:
命名空间浏览器视图显示活动REPL。[2]的所有命名空间的所有符号。它允许您跳转到相关文件(包括jar中的符号)的定义:只需在“命名空间浏览器”视图中双击符号名称。
doc
功能是为什么不特别优先考虑为旧库和其他软件包提供文档的原因吗?