Clojure - Watchers

Watcherssono funzioni aggiunte a tipi di variabili come atomi e variabili di riferimento che vengono richiamate quando un valore del tipo di variabile cambia. Ad esempio, se il programma chiamante cambia il valore di una variabile atom e se una funzione watcher è collegata alla variabile atom, la funzione verrà richiamata non appena il valore dell'atomo viene modificato.

Le seguenti funzioni sono disponibili in Clojure for Watchers.

add-watch

Aggiunge una funzione di controllo a un riferimento agent / atom / var / ref. L'orologio‘fn’deve essere una 'fn' di 4 argomenti: una chiave, il riferimento, il suo vecchio stato, il suo nuovo stato. Ogni volta che lo stato del riferimento potrebbe essere stato modificato, tutti gli orologi registrati avranno le loro funzioni chiamate.

Sintassi

Di seguito è riportata la sintassi.

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

Parameters- "variabile" è il nome dell'atomo o della variabile di riferimento. 'variabile-tipo' è il tipo di variabile, atom o variabile di riferimento. "vecchio stato e nuovo stato" sono parametri che manterranno automaticamente il vecchio e il nuovo valore della variabile. "key" deve essere univoco per riferimento e può essere utilizzato per rimuovere l'orologio con remove-watch.

Return Value - Nessuno.

Esempio

Un esempio di come viene utilizzato è mostrato nel seguente programma.

(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)

Produzione

Il programma precedente produce il seguente output.

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

rimuovere-guardare

Rimuove un orologio che è stato collegato a una variabile di riferimento.

Sintassi

Di seguito è riportata la sintassi.

(remove-watch variable watchname)

Parameters- "variabile" è il nome dell'atomo o della variabile di riferimento. 'watchname' è il nome dato all'orologio quando viene definita la funzione dell'orologio.

Return Value - Nessuno.

Esempio

Un esempio di come viene utilizzato è mostrato nel seguente programma.

(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)

Produzione

Il programma precedente produce il seguente output.

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

Puoi vedere chiaramente dal programma sopra che il secondo comando di ripristino non attiva il watcher poiché è stato rimosso dall'elenco dei watcher.