作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
每本教科书都说 Clojure 数据结构是“不可变的和持久的”。他们用不同的篇幅解释了这个概念,但到目前为止我还没有弄清楚不变性和持久性之间的区别是什么。是否存在持久但可变的实体?还是不可变但不持久?
最佳答案
不可变意味着该值无法更改,持久性意味着如果该值已存在于程序中,则复制该值的路径。 Clojure 将其用作其结构共享实现的一部分。如果数据不存在,则创建它。如果数据存在,则新数据建立在旧版本数据的基础上,而不会更改或删除它。
原子是持久的,但安全地可变。
user> (def +a+ (atom 0))
#'user/+a+
user> @+a+
0
user> (swap! +a+ inc)
1
user> @+a+
1
user> (def t (transient []))
#'user/t
user> (conj! t 1)
#<TransientVector clojure.lang.PersistentVector$TransientVector@658ee462>
user> (persistent! t)
[1]
关于Clojure:不变性和持久性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27152555/
我是一名优秀的程序员,十分优秀!