defrecord持有递增的`vector` /`java class`

时间:2018-11-20 04:01:33

标签: clojure

犹太人: 谢谢您对这个问题的关注!

在这种情况下,我想定义一个不变的银行帐户记录

(defrecord account [ name balance statements])
(def cash-account (->account :cash 0.0 []))

我有一个将deposit钱存入该帐户的功能,并且将返回account的新记录

(.deposit cash-account 100.0 )
;; returns a new cash-account with attributes 
;; name = :cash balance= 100, statment=[ [(2018,1,1),100 ] ]

随着越来越多的充值和提现,字段statement列表将随着内部越来越多的交易而扩展。

我的问题是: 经过1000笔交易后,最新帐户收益的statment字段中就有1000个元素。

第1001次交易发生时:

Clojure是否会在旧帐户记录的statment字段中 * copy * 1000个交易,并追加新交易,将其保存到新帐户记录中?

或Clojure只是 * append * 将新交易记录到旧帐户记录中,并提供新的指针,使其看起来像新帐户记录一样,例如持久性地图?

感谢您的帮助,非常感谢

2 个答案:

答案 0 :(得分:2)

来自https://clojure.org/reference/datatypes#_deftype_and_defrecord

  • defrecord提供了持久性映射的完整实现
  • deftype支持可变字段,defrecord不支持

因此,在您的情况下,它不会复制事务,而是使用持久性数据结构,因此看起来就像已追加事务。

>

答案 1 :(得分:0)