Clojure - dosync

Esegue l'espressione (in un do implicito) in una transazione che comprende l'espressione e tutte le chiamate annidate. Avvia una transazione se nessuna è già in esecuzione su questo thread. Qualsiasi eccezione non rilevata interromperà la transazione e uscirà da dosync.

Sintassi

Di seguito è riportata la sintassi.

(dosync expression)

Parameters - 'espressione' è l'insieme di espressioni, che arriverà nel blocco dosync.

Return Value - Nessuno.

Esempio

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

(ns clojure.examples.example
   (:gen-class))
(defn Example []
   (def names (ref []))
   
   (defn change [newname]
      (dosync
         (alter names conj newname)))
   (change "John")
   (change "Mark")
   (println @names))
(Example)

Produzione

Il programma precedente produce il seguente output.

[John Mark]