Clojure - Naturaleza inmutable

Por defecto, las estructuras también son inmutables, por lo que si intentamos cambiar el valor de una clave en particular, no cambiará.

Ejemplo

Un ejemplo de cómo sucede esto se muestra en el siguiente programa.

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

En el ejemplo anterior, intentamos usar la función 'assoc' para asociar un nuevo valor para el Nombre del empleado en la estructura.

Salida

El programa anterior produce la siguiente salida.

John
John

Esto muestra claramente que la estructura es inmutable. La única forma de cambiar el valor es crear una nueva variable con el valor cambiado como se muestra en el siguiente programa.

Ejemplo

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

Salida

El programa anterior produce la siguiente salida.

{:EmployeeName Mark, :Employeeid 1}