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}