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.htm
廣告