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


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

(show java.awt.Graphics)

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

(show 'clojure.contrib.repl-utils)

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

4 55

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 по пространству имен, с некоторыми дополнительными критериями прилагается:

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

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

  3. ns-publics -- как ns-interns, но включает в себя только не частные Vars.

  4. 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]. Это позволяет перейти к определению символы в соответствующих файлах (в том числе внутри банок): просто дважды щелкните имя символа в представлении обозревателя пространств имен.