Clojure namespace: метод, чтобы увидеть определенные объекты? - PullRequest
7 голосов
/ 06 января 2010

Есть ли способ увидеть, что уже было определено в сеансе clojure (эквивалентно вызову ls ())? Допустим, я создаю несколько объектов:

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

Есть ли команда, которая может быть запущена, чтобы показать мне, что она теперь существует в пространстве имен пользователя?

Ответы [ 2 ]

18 голосов
/ 06 января 2010

Я делаю все назначения в пространстве имен пользователя.

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}
7 голосов
/ 06 января 2010

Может быть ns-publics?

Возвращает карту общедоступных внутренних сопоставлений для пространства имен.

или ns-map?

Возвращает карту всех отображений для пространства имен.


Насколько я понимаю, «глобальной среды» нет, есть только пространства имен. Конечно, какой бы вы ни находились в данный момент, он выглядит как «глобальная среда» для практических целей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...