67 votes

Comment lister les fonctions d'un espace de noms?

Je voudrais savoir comment afficher la liste de toutes les fonctions d'une Clojure espace de noms. J'ai fait quelques recherches mais je n'en suis pas encore là. J'ai déjà trouvé comment afficher la liste des méthodes d'une classe Java à l'aide de la méthode show:

(show java.awt.Graphics)

Pour la liste des fonctions d'un Clojure espace de noms j'ai essayé la méthode afficher comme ceci:

(show 'clojure.contrib.repl-utils)

Cela montre certaines Java les méthodes de la classe, mais pas ceux que je cherche comme doc et show. Comment puis-je obtenir ces?

87voto

Michał Marczyk Points 54179

J'ai l'habitude de l'appeler

(keys (ns-publics 'foo))

pour la liste de Vars exportés par l'espace de noms foo; par exemple, pour clojure.contrib.monads ce retourne

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

(l' ... signifie beaucoup plus).

Plus généralement, il y a un tas de fonctions dont les noms commencent en ns- qui liste Vars par espace de noms, avec certains critères supplémentaires ci-jointe:

  1. ns-map - la plus générale de la fonction de tous, retourne une carte assortie par des symboles (non-espace de noms qualifiés symboles en fait), où la valeur correspondant à chaque symbole est le Var ou d'une classe qui symbole résout dans l'espace de noms donné.

  2. ns-interns -- comme ns-map, mais ne comprend que les Vars internés dans l'espace de noms indiqué (par opposition à Vars à partir d'autres espaces de noms qui sont accessibles à partir de l'espace de noms donné en raison d'un use ou refer appel ou de l'implicite de référence de Vars clojure.core.

  3. ns-publics -- comme ns-interns, mais ne comprend que les non-privé Vars.

  4. ns-imports -- comme ns-map, mais ne comprend que les entrées dont les valeurs correspondent à des classes Java.

Il y a aussi ns-aliases de listes de symboles qui peut être utilisé comme abréviation alias lorsque l'on se réfère à Vars à partir d'autres espaces de noms; par exemple, si vous appelez (require '[clojure.contrib.math :as math]), ns-aliases comprendra une entrée avec la clé de math (le symbole), dont la valeur sera l'espace de noms clojure.contrib.math. Ces cartographie ne sont pas inclus dans la carte retournée par ns-map.

62voto

Mars Points 1622

Vous pouvez utiliser dir . (Peut-être que ce n'était pas disponible lorsque la question a été posée pour la première fois.)

 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
 

6voto

Bozhidar Batsov Points 23298

Regardez ici . Plus précisement:

 ;; Sometimes I like to ask which public functions a namespace provides.
(defn- ns-publics-list [ns] (#(list (ns-name %) (map first (ns-publics %))) ns))
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X