Ale*_*lov 7 persistence clojure immutability
每本教科书都说Clojure数据结构是"不可变的,持久的".他们用不同的长度来解释这个概念,但到目前为止,我没有弄清楚不变性和持久性之间的区别.是否存在持久但可变的实体?或不可变但不持久?
不可变表示值不能更改,而持久性表示如果值已存在于程序中,则将复制该值的路径。Clojure将此用作其结构共享实现的一部分。如果数据不存在,则创建它。如果数据存在,则新数据将建立在旧版本的数据上,而不会对其进行更改或删除。
原子是持久的,但可以安全地可变。
user> (def +a+ (atom 0))
#'user/+a+
user> @+a+
0
user> (swap! +a+ inc)
1
user> @+a+
1
Run Code Online (Sandbox Code Playgroud)
瞬变是易变的,但突变后应使其持久
user> (def t (transient []))
#'user/t
user> (conj! t 1)
#<TransientVector clojure.lang.PersistentVector$TransientVector@658ee462>
user> (persistent! t)
[1]
Run Code Online (Sandbox Code Playgroud)
了解Clojure的持久向量,第pt。1 => http://hypirion.com/musings/understanding-persistent-vector-pt-1
持久数据结构=> https://en.wikipedia.org/wiki/Persistent_data_structure
永久数据结构和托管引用=> http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey