在clojure中实现undo/redo的模式

nan*_*sen 6 design-patterns functional-programming clojure

是否存在在clojure或fp中实现撤消/重做功能的既定模式?

在OO语言中,我会使用命令模式,但因为它是关于状态我不知道它是否在clojure中是惯用的.

有没有可以提供帮助的图书馆?

Art*_*ldt 5

与许多设计模式一样,您可以将其作为clojure中的函数来实现.它取决于你如何在程序中代表状态(refs,atoms,agents),这个过程非常相似.

您只需向州代理/ ref/atom 添加一个watcher函数,每次有更新时都会将状态添加到撤消列表中.然后你的撤销功能只是在撤消列表中查找.这具有将您的too添加到撤消列表的良好效果,也允许重做

我的第一印象是refs可能是正确的工具,因为你将能够以协调的方式恢复它们,除非你当然可以将你的程序状态减少到一个单一的身份(在Clojure意义上)然后你不需要协调更新,代理就可以了.