Clojure - 结构不可变

默认情况下,结构也是不可变的,因此如果我们尝试更改特定键的值,它不会改变。

示例

以下程序显示了这种情况如何发生的示例。

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

在上面的示例中,我们尝试使用"assoc"函数为结构中的"员工姓名"关联一个新值。

输出

上面的程序产生以下输出。

John
John

这清楚地表明该结构是不可变的。 更改该值的唯一方法是使用更改后的值创建一个新变量,如以下程序所示。

示例

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

输出

上面的程序产生以下输出。

{:EmployeeName Mark, :Employeeid 1}

❮ clojure_structmaps.html