假设这是一个处理波形的数学应用程序。用户打开一个波形文件,并对其进行编辑。
现在用户使用应用程序工具箱放大波形。 放大可能需要很长时间。然后他们撤消它。然后他们再次重做。
对于重做,应用程序应该如何表现?
- 替换之前执行并由应用程序内部保存在内存中的放大结果。
- 再次重新运行耗时的扩增程序?
这个问题扩展到每个功能。
谢谢:-)
最佳答案
撤消-重做操作通常使用命令堆栈和最后执行的命令的位置来实现。撤消后,您将该位置向后移动一步而不删除堆栈的最后一个命令(现在是最后执行的命令之后的一个)。
是否将数据与命令一起存储由您决定。但是,在您描述的情况下,要使撤消起作用,您需要完全反转最后一个命令(您可能无法做到),或者将以前的状态保留在内存中。因此,在这种特殊情况下,在放大之后保持下一个状态不会让您付出任何代价。但是,如果用户不重做该命令,您确实需要正确丢弃它。
正如@eddiewould 在评论中指出的那样,命令本身可能具有破坏性(因此不可逆)并且允许撤消它(通过保持先前的状态)可能是不可行的,例如由于内存限制。在这种情况下,您应该事先告知用户无法返回。
关于algorithm - 哪一个是撤消/重做行为的可接受约定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53800388/