Clojure - Natura immutabile

Di default anche le strutture sono immutabili, quindi se proviamo a cambiare il valore di una particolare chiave, non cambierà.

Esempio

Un esempio di come ciò avvenga è mostrato nel seguente programma.

(ns clojure.examples.example
   (:gen-class))
(defn Example []
   (defstruct Employee :EmployeeName :Employeeid)
   (def emp (struct-map Employee :EmployeeName "John" :Employeeid 1))
   (println (:EmployeeName emp))
   
   (assoc emp :EmployeeName "Mark")
   (println (:EmployeeName emp)))
(Example)

Nell'esempio precedente, proviamo a utilizzare la funzione "assoc" per associare un nuovo valore per il nome del dipendente nella struttura.

Produzione

Il programma precedente produce il seguente output.

John
John

Ciò mostra chiaramente che la struttura è immutabile. L'unico modo per modificare il valore è creare una nuova variabile con il valore modificato come mostrato nel programma seguente.

Esempio

(ns clojure.examples.example
   (:gen-class))
(defn Example []
   (defstruct Employee :EmployeeName :Employeeid)
   (def emp (struct-map Employee :EmployeeName "John" :Employeeid 1))
   (def newemp (assoc emp :EmployeeName "Mark"))
   (println newemp))
(Example)

Produzione

Il programma precedente produce il seguente output.

{:EmployeeName Mark, :Employeeid 1}