Как перечислить функции пространства имен?
Я хотел бы знать, как перечислять все функции пространства имен Clojure. Я провел какое-то исследование, но я еще не пришел. Я уже узнал, как перечислять методы класса Java с помощью метода show:
(show java.awt.Graphics)
Чтобы перечислить функции пространства имен Clojure, я пробовал метод show следующим образом:
(show 'clojure.contrib.repl-utils)
Здесь показаны некоторые методы класса Java, но не те, которые я ищу, например doc
и show
. Как я могу их получить?
Ответы
Ответ 1
Обычно я называю
(keys (ns-publics 'foo))
для отображения Vars, экспортируемого пространством имен foo
; например для clojure.contrib.monads
это возвращает
(defmonad censor m-when-not m+write+m maybe-m maybe-t ...)
(...
означает намного больше).
В более общем плане существует множество функций, имена которых начинаются в ns-
, которые перечисляют Vars по пространству имен, с присоединенными к ним дополнительными критериями:
-
ns-map
- самая общая функция для всех, возвращает карту, обозначенную символами (на самом деле это символы, отличные от именного пространства), где значение, соответствующее каждому символу, является Var или классом, этот символ разрешается в данном пространстве имен.
-
ns-interns
- как ns-map
, но включает только Vars, интернированные в данном пространстве имен (в отличие от Vars из других пространств имен, доступных из данного пространства имен из-за use
или refer
вызов или неявное направление Vars из clojure.core
.
-
ns-publics
- как ns-interns
, но включает только не-частные Vars.
-
ns-imports
- как ns-map
, но включает только записи, значения которых соответствуют классам Java.
Здесь также ns-aliases
, в котором перечислены символы, которые могут использоваться в качестве сокращенных псевдонимов при обращении к Vars из других пространств имен; например если вы вызываете (require '[clojure.contrib.math :as math])
, ns-aliases
будет содержать запись с ключом math
(символ), значением которой будет фактическое пространство имен clojure.contrib.math
. Эти отображения не включены в карту, возвращаемую ns-map
.
Ответ 2
Вы можете использовать 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
Ответ 3
Посмотрите здесь. Более конкретно:
;; Sometimes I like to ask which public functions a namespace provides.
(defn- ns-publics-list [ns] (#(list (ns-name %) (map first (ns-publics %))) ns))
Ответ 4
Для тех, кто использует Counterclockwise, есть "браузер пространства имен", который отображается по умолчанию.
Если он не отображается, его можно отобразить с помощью опции меню:
Окно > Показать представление > Браузер пространства имен
Официальная документация:
http://doc.ccw-ide.org/documentation.html#_namespace_browser_view
Выдержка из официальной документации:
В окне просмотра пространства имен отображаются все символы всех пространств имен активный REPL. [2]. Это позволяет вам перейти к определению символы в соответствующих файлах (включая внутренние банки): просто дважды щелкните по имени символа в представлении браузера пространства имен.