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}