4

部分讨论了FRP 流处理中的合并操作(使用了Sodium 库)。Book 展示了下图流组合,并说当事件通过流进入 FRP 逻辑时,它会导致在事务上下文中发生的级联状态更改,因此所有更改都是原子的。

事件流 - sDeselectsSelect(参见 2 个事件:“+”和“-”)源自 UI 控件,因为它们发生在同一个 FRP 事务中,因此它们携带的事件被认为是同时发生的。然后书上说

合并实现必须事件存储在临时存储中 ,直到它知道它不会再收到任何输入。然后它输出一个事件:如果它接收到多个事件,它使用提供的函数来组合它们;否则,它会输出它收到的一个事件。

问题:什么时候是“不再有输入”的时候?合并函数如何知道这一刻?它只是从给定图表上的第二个传入流中获取值的时间还是我错过了smth?你能用一个更好的流例子来说明它吗?

4

1 回答 1

3

Sodium 这样做的方式是为内存中保存的 FRP 逻辑的有向图的结构分配等级编号,这样如果 B 依赖于 A,那么 B 的等级将高于 A 的等级。(循环在分配这些等级的图遍历中被打破。)然后这些数字用作优先级队列中的优先级,首先处理低等级值。

在事件处理过程中,当优先级队列中没有任何内容低于合并的rank时,则知道合并不能再有输入数据,就会输出一个值。

于 2016-08-13T20:15:21.843 回答