首页 > 解决方案 > 你能看到 Clojure 中原子的先前值吗?

问题描述

“Clojure 形而上学将身份解释为我们人类强加于随时间推移而产生的一系列不变价值的东西”。

对一系列状态强加身份

(希金斯沃思,2015 年 10 月)

如果这是真的,如果身份覆盖所有这些状态,那么我应该能够做这样的事情。

user=> (def wow (atom 1))
#'user/wow
user=> (swap! wow (fn [cur] "You say 'Hello'."))
"You say 'Hello'."
user=> (swap! wow (fn [cur] "I say 'Goodbye'."))
"I say 'Goodbye'."
user=> (swap! wow (fn [cur] "Hello, hello!"))
"Hello, hello!"

; Can I do this?
user=> (get-old-atom-state wow 0)
1
(get-old-atom-state wow 1)
"You say 'Hello'"

是这样吗?或者如果不使用 Clojure 是否真的 GC 旧值?

标签: clojure

解决方案


如果这是真的,如果身份覆盖所有这些状态,那么我应该能够做这样的事情。

从哲学上讲,我真的没有看到这个“应该”的任何理由。“亚伦·贝尔”是一个包含你过去经历过的许多状态的身份,但我无法与任何过去的状态互动,甚至无法观察。我知道它们中的任何一个的唯一方法是,如果有人观察到它们并将这些观察结果写在一些我可以参考的不可变对象中。

Clojure 身份的行为方式相同:您可以随时拍摄快照,完成后,您可以随时查看该快照。但是没有人看过的状态永远消失了。


推荐阅读