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