背景 Clojure代理不会收到新的值,而是接收到一个应用于旧值的函数。在程序的早期阶段,我发现这种方式有些反直觉,通常编写以下形式的代码: (send some-atom (fn [old] new_value)) 后来我逐渐意识到,发送更新函数而不是新值有多么棒。 问题: 这个想法最初源自哪里?发送更新函数(而不是新值)被称为什么?这个想法是否属于另一种处理并发的更一般性技术集合中的一部分? 谢谢!
在这个视频中,Rich Hickey将其称为类似于功能时间模型。简而言之,在传统的OO语言中,标识是一个对象,在时间1时进入一种状态,在时间2时通过锁定该对象,然后编辑该对象,以使其在时间2时处于有效的状态,然后解锁它。必须锁定它以确保在状态之间没有人查看它。在视频中的棒球比赛示例中,这类似于让体育场内的每个人每次球移动时都闭上眼睛并清空他们的思想。值得花时间观看原始视频。原则是“未来是过去的函数”。标识是一系列状态,函数定义了这些状态之间的转换。哦,回答最初的问题,Rich归功于Alfred North Whitehead提出的想法。