【发布时间】:2012-04-08 11:42:37
【问题描述】:
一般来说,在 clojure 或 fp 中实现撤消/重做功能是否有既定模式?
在 OO 语言中,我会使用命令模式,但由于它是关于状态的,我想知道在 clojure 中这样做是否是惯用的。
有没有可以提供帮助的库?
【问题讨论】:
-
前面的问题应该是你是否真的需要这种状态突变。
-
@Alex Taggart:当然你真的没有(但我认为那是你的观点;)我只使用不可变对象(在 Java 中)编写了撤消/重做。您可以通过仅保存(用户输入)并通过在所需时间重播输入来重新创建“状态”来编写撤消/重做。因此,当您想从“t5 到 t4”撤消时,您不会从 t5 到 t4“倒回”,而是将输入从 t0 重放到 t4(并且因为您是以“功能方式”进行操作,所以您是保证以正确的状态结束)。适用于很多情况并大大简化了撤消/重做恕我直言......
标签: design-patterns clojure functional-programming