我正在考虑使用Clojure记录映射到程序中不断变化的实体。他们易变吗?还是您需要在记录中使用额外的引用?我对此有些困惑

最佳答案

值得一看Rich Hickey's fantastic video on identity and state

记录被设计为不变,并将某物的状态存储为值。

为了对变化中的实体的状态建模,我建议使用引用,该引用引用表示当前状态的不可变值。您可以将记录用于不可变状态,但通常仅使用简单的映射会更简单。

一个简单的示例,其中可变状态是游戏的计分板:

; set up map of current scores for each player
(def scores
  (ref
    {:mary 0
     :joe  0   }))

; create a function that increments scores as a side effect
(defn add-score [player amount]
  (dosync
    (alter scores update-in [player] + amount)))

; add some scores
(add-score :mary (rand-int 10))
(add-score :joe (rand-int 10))

; read the scores
@scores
=> {:mary 6, :joe 1}

关于clojure - 我可以在Clojure记录中创建可变状态吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5554178/

10-15 05:03