Clojure命名空间:查看已定义对象的方法?

时间:2010-01-06 11:46:35

标签: clojure

是否有某种方法可以查看已在clojure会话中定义的内容(相当于调用ls())?假设我创建了一些对象:

(def x 1)
(def y 2.2)
(def plus-one (fn [x] (+ x 1)))

是否有可以运行的命令向我显示这些命令现在存在于用户命名空间中?

2 个答案:

答案 0 :(得分:18)

我正在用户名空间中完成所有作业。

user> (def *foo 10) 
#'user/*foo

;;要查看用户命名空间中的所有公共实习生映射。

user> (ns-publics 'user)
{*foo #'user/*foo}

现在让我们定义一个非公开的函数

user> (defn- foobar[x]
        (println x)
#'user/foobar

当您调用ns-publics函数时。它不会在映射中显示foobar函数。

user> (ns-publics 'user)
{*foo #'user/*foo}

查看命名空间的实习生映射。使用(ns-interns'YOUR-NAMESPACE)

user> (ns-interns 'user)
{foobar #'user/foobar, *foo #'user/*foo}

答案 1 :(得分:7)

也许ns-publics

  

返回命名空间的公共实习生映射的映射。

ns-map

  

返回命名空间的所有映射的映射。


据我了解,没有“全球环境”,只有名称空间。当然,无论你目前“进入”哪一个看起来都像实际目的的“全球环境”。