Как перечислить функции пространства имен? - PullRequest
63 голосов
/ 30 апреля 2010

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

(show java.awt.Graphics)

Чтобы перечислить функции пространства имен Clojure, я попробовал метод show следующим образом:

(show 'clojure.contrib.repl-utils)

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

Ответы [ 4 ]

84 голосов
/ 01 мая 2010

Я обычно звоню

(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, но включает только переменные, интернированные в данном пространстве имен (в отличие от переменных из других пространств имен, которые доступны из данного пространства имен благодаря use или refer вызов или неявное направление Vars от clojure.core.

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

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

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

59 голосов
/ 29 октября 2013

Вы можете использовать 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
6 голосов
/ 01 мая 2010

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

;; Sometimes I like to ask which public functions a namespace provides.
(defn- ns-publics-list [ns] (#(list (ns-name %) (map first (ns-publics %))) ns))
0 голосов
/ 15 марта 2017

Для тех, кто использует Против часовой стрелки, есть «Обозреватель пространства имен», который отображается по умолчанию.

Если его не видно, его можно отобразить с помощью пункта меню:

Окно> Показать представление> Браузер пространства имен

Официальная документация: http://doc.ccw -ide.org / documentation.html # _namespace_browser_view

Выдержка из официальной документации:

Представление Браузер пространства имен отображает все символы всех пространств имен активный ответ. [2]. Это позволяет вам перейти к определению символы в соответствующих файлах (в том числе внутри банок): просто дважды щелкните по имени символа в представлении браузера пространства имен.

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