Espaces de noms
Les espaces de noms associent des symboles simples (non qualifiés) à des variables (Vars) et/ou des classes. Les variables peuvent être internées dans un espace de noms, à l'aide de `def` ou de ses variantes. Dans ce cas, elles possèdent un symbole simple pour leur nom et une référence à leur espace de noms conteneur, et ce dernier associe ce symbole à la variable correspondante. Un espace de noms peut également contenir des associations entre des symboles et des variables internées dans d'autres espaces de noms, grâce à `refer` ou `use`, ou entre des symboles et des objets de classe, grâce à `import`. Notez que les espaces de noms sont des objets de première classe : ils peuvent être énumérés,... Les espaces de noms sont également dynamiques ; ils peuvent être créés, supprimés et modifiés à l'exécution, dans le REPL,...
La meilleure façon de définir un nouvel espace de noms en haut d'un fichier source Clojure est d'utiliser la macro `ns`. Par défaut, cela crée un nouvel espace de noms contenant les associations pour les noms de classes de `java.lang` et `clojure.lang.Compiler`, ainsi que pour les fonctions de `clojure.core`.
Dans le REPL, il est préférable d'utiliser `in-ns`, auquel cas le nouvel espace de noms ne contiendra que les correspondances pour les noms de classes de `java.lang`. Pour accéder aux noms de l'espace de noms `clojure.core`, vous devez exécuter `(clojure.core/refer 'clojure.core')`. L'espace de noms utilisateur du REPL a déjà effectué cette opération.
L'espace de noms courant, `*ns*`, ne peut et ne doit être défini qu'avec un appel à `in-ns` ou à la macro `ns`, créant toutes deux l'espace de noms s'il n'existe pas.
Fonctions associées
| Catégorie | Fonctions |
|---|---|
| Création et basculement vers un espace de noms : | in-ns ns create-ns |
| Ajout à un espace de noms : | alias def import intern refer |
| Déterminer les espaces de noms existants : | all-ns find-ns |
| Examiner un espace de noms : | ns-name ns-aliases ns-imports ns-interns ns-map ns-publics ns-refers |
| Récupération d'un espace de noms à partir d'un symbole : | resolve ns-resolve namespace |
| Enlever des éléments : | ns-unalias ns-unmap remove-ns |
Plus d'informations
Voir aussi :
- Apprendre Clojure - Espaces de noms
- Référence - Vars