defrecord holding a incrementing `vector` / `java class`











up vote
0
down vote

favorite












Clojurians:
Thank you for your attention on this question !



Here is case I'm thinking about, I want to define a immutable bank account record



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


I have a function that will deposit money to that account ,and a new record of account shall return



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


With more and more deposit and withdraw happening , the field statement list will expanding with more and more transactions inside.



My question will be :
after 1000 transactions, there are 1000 elements in the statment field of latest account return.



When 1001th transaction happend:



will Clojure *copy* 1000 transactions in the statment field of old account record ,and append new transaction, save them into new account record ?



or Clojure just *append* the new transaction to the old account record and provide a new pointer to it , make it look like new account record like persistent map ?



Appreciate your help & many thanks










share|improve this question


























    up vote
    0
    down vote

    favorite












    Clojurians:
    Thank you for your attention on this question !



    Here is case I'm thinking about, I want to define a immutable bank account record



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


    I have a function that will deposit money to that account ,and a new record of account shall return



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


    With more and more deposit and withdraw happening , the field statement list will expanding with more and more transactions inside.



    My question will be :
    after 1000 transactions, there are 1000 elements in the statment field of latest account return.



    When 1001th transaction happend:



    will Clojure *copy* 1000 transactions in the statment field of old account record ,and append new transaction, save them into new account record ?



    or Clojure just *append* the new transaction to the old account record and provide a new pointer to it , make it look like new account record like persistent map ?



    Appreciate your help & many thanks










    share|improve this question
























      up vote
      0
      down vote

      favorite









      up vote
      0
      down vote

      favorite











      Clojurians:
      Thank you for your attention on this question !



      Here is case I'm thinking about, I want to define a immutable bank account record



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


      I have a function that will deposit money to that account ,and a new record of account shall return



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


      With more and more deposit and withdraw happening , the field statement list will expanding with more and more transactions inside.



      My question will be :
      after 1000 transactions, there are 1000 elements in the statment field of latest account return.



      When 1001th transaction happend:



      will Clojure *copy* 1000 transactions in the statment field of old account record ,and append new transaction, save them into new account record ?



      or Clojure just *append* the new transaction to the old account record and provide a new pointer to it , make it look like new account record like persistent map ?



      Appreciate your help & many thanks










      share|improve this question













      Clojurians:
      Thank you for your attention on this question !



      Here is case I'm thinking about, I want to define a immutable bank account record



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


      I have a function that will deposit money to that account ,and a new record of account shall return



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


      With more and more deposit and withdraw happening , the field statement list will expanding with more and more transactions inside.



      My question will be :
      after 1000 transactions, there are 1000 elements in the statment field of latest account return.



      When 1001th transaction happend:



      will Clojure *copy* 1000 transactions in the statment field of old account record ,and append new transaction, save them into new account record ?



      or Clojure just *append* the new transaction to the old account record and provide a new pointer to it , make it look like new account record like persistent map ?



      Appreciate your help & many thanks







      clojure






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 20 at 4:01









      Shawn Zhang

      9091616




      9091616
























          2 Answers
          2






          active

          oldest

          votes

















          up vote
          2
          down vote



          accepted










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




          • defrecord provides a complete implementation of a persistent map

          • deftype supports mutable fields, defrecord does not


          so, in your case, it will not copy the transactions, instead it will use a persistent data structure so it will look like the transaction was appended.






          share|improve this answer




























            up vote
            0
            down vote













            Here are some more docs you should also check:




            • https://www.braveclojure.com/functional-programming/

            • https://clojure.org/guides/learn/sequential_colls

            • https://purelyfunctional.tv/guide/clojure-collections/

            • https://youtu.be/lJr6ot8jGQE






            share|improve this answer





















              Your Answer






              StackExchange.ifUsing("editor", function () {
              StackExchange.using("externalEditor", function () {
              StackExchange.using("snippets", function () {
              StackExchange.snippets.init();
              });
              });
              }, "code-snippets");

              StackExchange.ready(function() {
              var channelOptions = {
              tags: "".split(" "),
              id: "1"
              };
              initTagRenderer("".split(" "), "".split(" "), channelOptions);

              StackExchange.using("externalEditor", function() {
              // Have to fire editor after snippets, if snippets enabled
              if (StackExchange.settings.snippets.snippetsEnabled) {
              StackExchange.using("snippets", function() {
              createEditor();
              });
              }
              else {
              createEditor();
              }
              });

              function createEditor() {
              StackExchange.prepareEditor({
              heartbeatType: 'answer',
              convertImagesToLinks: true,
              noModals: true,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: 10,
              bindNavPrevention: true,
              postfix: "",
              imageUploader: {
              brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
              contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
              allowUrls: true
              },
              onDemand: true,
              discardSelector: ".discard-answer"
              ,immediatelyShowMarkdownHelp:true
              });


              }
              });














              draft saved

              draft discarded


















              StackExchange.ready(
              function () {
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53386033%2fdefrecord-holding-a-incrementing-vector-java-class%23new-answer', 'question_page');
              }
              );

              Post as a guest















              Required, but never shown

























              2 Answers
              2






              active

              oldest

              votes








              2 Answers
              2






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes








              up vote
              2
              down vote



              accepted










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




              • defrecord provides a complete implementation of a persistent map

              • deftype supports mutable fields, defrecord does not


              so, in your case, it will not copy the transactions, instead it will use a persistent data structure so it will look like the transaction was appended.






              share|improve this answer

























                up vote
                2
                down vote



                accepted










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




                • defrecord provides a complete implementation of a persistent map

                • deftype supports mutable fields, defrecord does not


                so, in your case, it will not copy the transactions, instead it will use a persistent data structure so it will look like the transaction was appended.






                share|improve this answer























                  up vote
                  2
                  down vote



                  accepted







                  up vote
                  2
                  down vote



                  accepted






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




                  • defrecord provides a complete implementation of a persistent map

                  • deftype supports mutable fields, defrecord does not


                  so, in your case, it will not copy the transactions, instead it will use a persistent data structure so it will look like the transaction was appended.






                  share|improve this answer












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




                  • defrecord provides a complete implementation of a persistent map

                  • deftype supports mutable fields, defrecord does not


                  so, in your case, it will not copy the transactions, instead it will use a persistent data structure so it will look like the transaction was appended.







                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Nov 20 at 4:19









                  Denis Fuenzalida

                  874614




                  874614
























                      up vote
                      0
                      down vote













                      Here are some more docs you should also check:




                      • https://www.braveclojure.com/functional-programming/

                      • https://clojure.org/guides/learn/sequential_colls

                      • https://purelyfunctional.tv/guide/clojure-collections/

                      • https://youtu.be/lJr6ot8jGQE






                      share|improve this answer

























                        up vote
                        0
                        down vote













                        Here are some more docs you should also check:




                        • https://www.braveclojure.com/functional-programming/

                        • https://clojure.org/guides/learn/sequential_colls

                        • https://purelyfunctional.tv/guide/clojure-collections/

                        • https://youtu.be/lJr6ot8jGQE






                        share|improve this answer























                          up vote
                          0
                          down vote










                          up vote
                          0
                          down vote









                          Here are some more docs you should also check:




                          • https://www.braveclojure.com/functional-programming/

                          • https://clojure.org/guides/learn/sequential_colls

                          • https://purelyfunctional.tv/guide/clojure-collections/

                          • https://youtu.be/lJr6ot8jGQE






                          share|improve this answer












                          Here are some more docs you should also check:




                          • https://www.braveclojure.com/functional-programming/

                          • https://clojure.org/guides/learn/sequential_colls

                          • https://purelyfunctional.tv/guide/clojure-collections/

                          • https://youtu.be/lJr6ot8jGQE







                          share|improve this answer












                          share|improve this answer



                          share|improve this answer










                          answered Nov 20 at 8:02









                          Alan Thompson

                          12.8k12433




                          12.8k12433






























                              draft saved

                              draft discarded




















































                              Thanks for contributing an answer to Stack Overflow!


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid



                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.


                              To learn more, see our tips on writing great answers.





                              Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                              Please pay close attention to the following guidance:


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid



                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.


                              To learn more, see our tips on writing great answers.




                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function () {
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53386033%2fdefrecord-holding-a-incrementing-vector-java-class%23new-answer', 'question_page');
                              }
                              );

                              Post as a guest















                              Required, but never shown





















































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown

































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown







                              Popular posts from this blog

                              Wiesbaden

                              Marschland

                              Dieringhausen