defrecord, содержащий инкрементный `вектор` /` класс java` - PullRequest
0 голосов
/ 20 ноября 2018

Clojurians: Спасибо за ваше внимание к этому вопросу!

Вот случай, о котором я думаю, я хочу определить неизменяемую запись банковского счета

(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 list будет расширяться с увеличением ибольше транзакций внутри.

Мой вопрос будет таким: после 1000 транзакций в поле statment последнего возврата счета будет 1000 элементов.

Когда произойдет 1001-я транзакция:

будет ли Clojure * копировать * 1000 транзакций в поле statment старой записи учетной записи и добавлять новые транзакции, сохранять их в новую запись учетной записи?

или Clojure просто *добавить * новую транзакцию к старой записи учетной записи и предоставить новый указатель на нее, чтобы она выглядела как новая запись учетной записи как постоянная карта?

Благодарим вас за помощь и многое другоекс

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Вот еще несколько документов, которые вы также должны проверить:

0 голосов
/ 20 ноября 2018

С https://clojure.org/reference/datatypes#_deftype_and_defrecord:

  • defrecord обеспечивает полную реализацию постоянной карты
  • deftype поддерживает изменяемые поля, defrecord не

поэтому в вашем случае он не будет копировать транзакции, вместо этого он будет использовать постоянную структуру данных, поэтому будет выглядеть, как будто транзакция добавлена ​​.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...