克罗地亚人:感谢您对这个问题的关注!
这是我正在考虑的情况,我想定义一个不可变的银行账户记录
(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
字段中复制*1000笔交易,并附加新交易,将其保存到新账户记录中?
或者Clojure只是*append*将新事务添加到旧帐户记录并提供一个指向它的新指针,使其看起来像新帐户记录一样的持久映射?
感谢您的帮助&非常感谢
来源https://clojure.org/reference/datatypes#_deftype_and_defrecord:
- defrecord提供了持久映射的完整实现
- deftype支持可变字段,defrecord不支持
因此,在您的情况下,它不会复制事务,而是使用持久数据结构,因此看起来事务是被附加的。
以下是您还应该检查的更多文档:
- https://www.braveclojure.com/functional-programming/
- https://clojure.org/guides/learn/sequential_colls
- https://purelyfunctional.tv/guide/clojure-collections/
- https://youtu.be/lJr6ot8jGQE