2010-01-06 72 views
7

有什么方法可以查看clojure会话中已经定义了什么(相当于调用ls())?比方说,我创建了几个对象:Clojure命名空间:方法来查看定义的对象?

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

有没有可以运行告诉我,这些现在在用户命名空间中的命令?

回答

18

我正在做用户命名空间中的所有分配。

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

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

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

现在,让我们定义一个函数,而不是公共

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

当你调用NS-公众的功能。它不会在映射中显示foobar函数。

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

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

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

哦,这就是'ns-interns'的用处! +1,但我没有投票;) – 2010-01-06 15:28:55

7

也许ns-publics

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

or ns-map

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


据我所知,没有“全球环境,”只有命名空间。当然,无论你现在“在”哪一个看起来像是一个实际用途的“全球环境”。

+0

+1谢谢!这非常有帮助。 – Shane 2010-01-06 14:03:25