Section courante

A propos

Section administrative du site

Métadonnées

Les symboles et les collections prennent en charge les métadonnées, c'est-à-dire une carte des données relatives au symbole ou à la collection. Le système de métadonnées permet d'annoter les données de manière arbitraire. Il sert à fournir des informations au compilateur sur les types, mais peut également être utilisé par les développeurs d'applications à de nombreuses fins, notamment pour annoter les sources de données, les politiques, etc.

Il est important de comprendre que les métadonnées ne font pas partie de la valeur d'un objet. Par conséquent, elles n'ont aucune incidence sur l'égalité (ou les codes de hachage). Deux objets qui ne diffèrent que par leurs métadonnées sont égaux.

Cela dit, les métadonnées et leur relation à un objet sont immuables : un objet possédant des métadonnées différentes est un objet différent. L'une des conséquences est que l'application de métadonnées à une séquence paresseuse permet de réaliser le début de la séquence, de sorte que les deux objets peuvent partager la même séquence.

(objet meta)

Renvoie les métadonnées de l'objet, renvoie nil s'il n'y a pas de métadonnées.

  1. (pprint (meta #'+)) ;; #'+ est le + variable
  2.  
  3. ;; {:added "1.2",
  4. ;;  :name +,
  5. ;;  :file "clojure/core.clj",
  6. ;;  :column 1,
  7. ;;  :line 984,
  8. ;;  :arglists ([] [x] [x y] [x y & more]),
  9. ;;  ...

(cartographie d'objet with-meta)

Renvoie un objet du même type et de la même valeur que obj, avec map comme métadonnées.

  1. (def m ^:hi [1 2 3])
  2. (meta (with-meta m {:bye true}))
  3. ;; {:bye true}

*print-meta*

Si cette option est activée (valeur logique «true»), lors de l'impression d'un objet, ses métadonnées seront également imprimées sous une forme lisible par le lecteur.

  1. (def m ^:hi [1 2 3])
  2. (binding [*print-meta* true]
  3.   (prn m))
  4.  
  5. ;; ^{:hi true} [1 2 3]

( objet f & args vary-meta)

Renvoie un objet du même type et de la même valeur que obj, avec (apply f (meta obj) args) comme métadonnées.

  1. (def m ^:hi [1 2 3])
  2. (meta (vary-meta m merge {:bye true}))
  3. ;; {:hi true, :bye true}
  4.  

(ref f & args alter-meta!) et (ref map reset-meta!)

Modifier ou réinitialiser les métadonnées respectivement pour un espace de noms/var/ref/agent/atome.

Lecteur de métadonnées

Outre l'utilisation de `with-meta`, un lecteur de métadonnées permet d'appliquer des métadonnées à l'expression suivante lors de la lecture.

Pour plus d'informations sur l'utilisation des métadonnées par le compilateur lors de la sélection des surcharges de méthodes, consultez la section «Indications de type» et «Balises de paramètres».



Dernière mise à jour : Lundi, le 2 février 2026