不会向Clojure Agent发送新值。它们被发送一个应用于旧值的函数。在编程的最初几天,我发现这个反直觉,并且经常编写以下形式的代码:
(send some-atom (fn [old] new_value))
然后,逐渐地,我意识到发送更新功能而不是新值是多么棒。
这个想法最初来自哪里?什么是发送更新函数(而不是新值)?这个想法是否是一种更通用的技术集的一部分,用于处理并发的不同方法?
谢谢!
答案 0 :(得分:2)
Rich Hickey在this video中将其称为功能时间模型。解释;在传统的OO语言中,身份是一个对象,它通过锁定对象从时间1的一个状态到时间-2的另一个状态,然后编辑对象,使其有效地始终处于它所处的状态 - 2,然后解锁它。你必须锁定它以确保没有人在状态之间查看它。在该视频的棒球比赛示例中,这类似于让球场中的每个人闭上眼睛并在每次球移动时清醒他们的头脑。值得花些时间观看原始视频。
校长是“未来是过去的一个功能”
标识是一系列状态和函数定义这些状态之间的转换
哦,并回答原来的问题Rich将这个想法归功于Alfred North Whitehead