Как перечислить функции пространства имен?

Я хотел бы знать, как перечислить все функции пространства имен Clojure. Я провел некоторое исследование, но я еще не там. Я уже узнал, как перечислить методы класса Java с помощью выставочного метода:

(show java.awt.Graphics)

Для списка функций пространства имен Clojure, я попробовал выставочный метод как это:

(show 'clojure.contrib.repl-utils)

Это показывает некоторые методы класса Java, но не те я ищу как doc и show. Как я могу получить это?

66
задан StackedCrooked 18 April 2012 в 17:15
поделиться

2 ответа

Обычно я вызываю

(keys (ns-publics 'foo))

, чтобы просмотреть список переменных, экспортируемых пространством имен foo ; например для clojure.contrib.monads это возвращает

(defmonad censor m-when-not m+write+m maybe-m maybe-t ...)

( ... означает намного больше).

В более общем плане, существует группа функций, имена которых начинаются с ns- , которые перечисляют Vars по пространству имен с некоторыми дополнительными критериями:

  1. ns-map - самая общая функция всего, возвращает карту с ключевыми символами (на самом деле символы, не определяемые пространством имен), где значение, соответствующее каждому символу, является Var или классом, в который символ разрешается в данном пространстве имен.

  2. ns-interns - как ns-map , но включает только Vars, интернированные в данном пространстве имен (в отличие от Vars из других пространств имен, которые доступны из данного пространства имен из-за используйте вызов или refer или неявную ссылку на Vars из clojure.core .

  3. ns-publics - например, ns- interns , но включает только нечастные Vars.

  4. ns-import - аналогично ns-map , но включает только те записи, значения которых соответствуют классам Java.

Также есть ns-aliases , в котором перечислены символы, которые могут использоваться в качестве сокращенных псевдонимов при обращении к Vars из других пространств имен; например если вы вызовете (require '[clojure.contrib.math: as math]) , ns-aliases будет включать запись с ключом math ( symbol), значением которого будет фактическое пространство имен clojure.contrib.math . Эти сопоставления не включены в карту, возвращаемую ns-map .

86
ответ дан 24 November 2019 в 14:55
поделиться

Посмотрите здесь. Более конкретно:

;; Sometimes I like to ask which public functions a namespace provides.
(defn- ns-publics-list [ns] (#(list (ns-name %) (map first (ns-publics %))) ns))
6
ответ дан 24 November 2019 в 14:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: