Clojure - Observateurs

Watcherssont des fonctions ajoutées à des types de variables tels que des atomes et des variables de référence qui sont invoquées lorsqu'une valeur du type de variable change. Par exemple, si le programme appelant change la valeur d'une variable atom, et si une fonction watcher est attachée à la variable atom, la fonction sera appelée dès que la valeur de l'atome sera modifiée.

Les fonctions suivantes sont disponibles dans Clojure for Watchers.

ajouter-regarder

Ajoute une fonction de surveillance à une référence agent / atom / var / ref. La montre‘fn’doit être un 'fn' de 4 arguments: une clé, la référence, son ancien état, son nouvel état. Chaque fois que l'état de la référence a pu être changé, toutes les montres enregistrées verront leurs fonctions appelées.

Syntaxe

Voici la syntaxe.

(add-watch variable :watcher
   (fn [key variable-type old-state new-state]))

Parameters- 'variable' est le nom de l'atome ou de la variable de référence. «variable-type» est le type de variable, soit un atome, soit une variable de référence. «old-state & new-state» sont des paramètres qui contiendront automatiquement l'ancienne et la nouvelle valeur de la variable. «key» doit être unique par référence et peut être utilisée pour retirer la montre avec remove-watch.

Return Value - Aucun.

Exemple

Un exemple sur la façon dont cela est utilisé est montré dans le programme suivant.

(ns clojure.examples.example
   (:gen-class))
(defn Example []
   (def x (atom 0))
   (add-watch x :watcher
      (fn [key atom old-state new-state]
      (println "The value of the atom has been changed")
      (println "old-state" old-state)
      (println "new-state" new-state)))
(reset! x 2))
(Example)

Production

Le programme ci-dessus produit la sortie suivante.

The value of the atom has been changed
old-state 0
new-state 2

supprimer-montre

Supprime une montre qui a été associée à une variable de référence.

Syntaxe

Voici la syntaxe.

(remove-watch variable watchname)

Parameters- 'variable' est le nom de l'atome ou de la variable de référence. «watchname» est le nom donné à la montre lorsque la fonction de la montre est définie.

Return Value - Aucun.

Exemple

Un exemple sur la façon dont cela est utilisé est montré dans le programme suivant.

(ns clojure.examples.example
   (:gen-class))
(defn Example []
   (def x (atom 0))
   (add-watch x :watcher
      (fn [key atom old-state new-state]
         (println "The value of the atom has been changed")
         (println "old-state" old-state)
         (println "new-state" new-state)))
   (reset! x 2)
   (remove-watch x :watcher)
(reset! x 4))
(Example)

Production

Le programme ci-dessus produit la sortie suivante.

The value of the atom has been changed
old-state 0
new-state 2

Vous pouvez clairement voir dans le programme ci-dessus que la deuxième commande de réinitialisation ne déclenche pas l'observateur puisqu'elle a été supprimée de la liste de l'observateur.