我已经浏览了活性香蕉的文档,我找不到一种方法来指定显式的时间延迟。例如,例如,我想取一个Event t a,并将其所有出现的1秒移到未来;或者从现在起(在Moment t内)得到一个触发1秒的事件;或者类似的事情。在反应性香蕉中,明显的延迟是可以代表的吗?如果没有,用户如何实现,例如,回显输入延迟一秒钟?
发布于 2013-10-31 10:36:33
正如本所指出的,这是正确的:反应性香蕉不是内置的时间和延迟的概念。
其主要原因是难以保证逻辑时间和实时的一致性。当鼠标单击在还无法计算的事件的逻辑时间之前实时发生时会发生什么,即它的逻辑时间背后是谁的实时?
但是,仍然可以使用外部计时器事件来处理时间。请看一下Wave.hs示例。
发布于 2013-10-30 05:35:02
无论如何,我不是专家,但我用了一个老的反应性香蕉来处理一个完全有这种需求的程序(不幸的是,我手头上没有代码)。
我认为显式延迟不适合超级自然的,而是反应性香蕉框架,因为您总是在隐式地处理某种抽象的时间。按特定时间间隔延迟需要处理现实世界中的时间概念。我可以看到,在权威模型( type Event a = [Maybe a]:是[a, b, a, b]还是[a, a, b, b] )中,很难说出像[a, b, a, b]这样的东西意味着什么?正如我一直在想的那样,问题是,在不考虑操作运行时细节的情况下,这两个结果中的哪一个应该是未指定的。
但是,您可以“围绕”反应性香蕉框架,将IO操作连接到想要将睡眠延迟一段时间的事件(显然不是在主线程中),然后触发另一个事件。我相信我能够将所有的逻辑封装在一个函数中,我可以从NetworkDescription monad调用这个函数(这是在Moment monad存在之前),以获得新的延迟事件。
https://stackoverflow.com/questions/19668940
复制相似问题