web-dev-qa-db-fra.com

Comment lister les fonctions d'un espace de noms?

J'aimerais savoir comment répertorier toutes les fonctions d'un espace de noms Clojure. J'ai fait des recherches mais je n'y suis pas encore. J'ai déjà découvert comment répertorier les méthodes d'une classe Java à l'aide de la méthode show:

(show Java.awt.Graphics)

Pour lister les fonctions d'un espace de noms Clojure, j'ai essayé la méthode show comme ceci:

(show 'clojure.contrib.repl-utils)

Cela montre quelques méthodes de classe Java, mais pas celles que je recherche comme doc et show. Comment puis-je les obtenir?

59
StackedCrooked

J'appelle normalement

(keys (ns-publics 'foo))

pour répertorier Vars exporté par l'espace de noms foo; par exemple. pour clojure.contrib.monads ceci retourne

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

(le ... signifie beaucoup plus).

Plus généralement, il y a un tas de fonctions dont les noms commencent par ns- qui listent Vars par espace de nom, avec certains critères supplémentaires attachés:

  1. ns-map - la fonction la plus générale de toutes, renvoie une mappe contenant des symboles (en fait, des symboles non qualifiés par un espace de nom), où la valeur correspondant à chaque symbole est le Var ou la classe à laquelle le symbole est résolu dans l'espace de nom donné.

  2. ns-interns - comme ns-map, mais n'inclut que le Vars interné dans l'espace de noms donné (contrairement à Vars depuis d'autres espaces de noms accessibles depuis cet espace de noms en raison d'un appel use ou refer ou de la référence implicite de Vars depuis clojure.core.

  3. ns-publics - comme ns-interns, mais n'inclut que le fichier Vars non privé.

  4. ns-imports - comme ns-map, mais n'inclut que les entrées dont les valeurs correspondent aux classes Java.

Il y a aussi ns-aliases qui répertorie les symboles qui peuvent être utilisés comme alias abrégés pour faire référence à Vars depuis d'autres espaces de noms; par exemple. Si vous appelez (require '[clojure.contrib.math :as math]), ns-aliases inclura une entrée avec la clé math (le symbole), dont la valeur sera l'espace de noms actuel clojure.contrib.math. Ces mappages ne sont pas inclus dans la carte renvoyée par ns-map.

81
Michał Marczyk

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
54
Mars

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))
6
Bozhidar Batsov

Pour ceux qui utilisent Counterclockwise, il existe un "Navigateur d'espace de noms" affiché par défaut.

S'il n'est pas visible, il peut être affiché via l'option de menu:

Fenêtre> Afficher la vue> Navigateur d'espaces de noms

Documentation officielle: http://doc.ccw-ide.org/documentation.html#_namespace_browser_view

Extrait de la documentation officielle:

La vue Navigateur d'espaces de noms affiche tous les symboles de tous les espaces de noms de le REPL actif [2]. Cela vous permet de passer directement à la définition de symboles dans les fichiers pertinents (y compris à l’intérieur des pots): seulement double-cliquez sur le nom du symbole dans la vue du navigateur d'espaces de noms.

0
JeffreyGoines