如何相互依赖处理这两个信号?

Lai*_*uan 17 scala frp reactive-programming

我阅读了使用Scala.React弃用Observer模式,发现反应式编程非常有趣.

但有一点我无法弄清楚:作者将信号描述为DAG(有向无环图)中的节点.那么如果你有两个信号(或事件源,或模型,w/e)相互依赖怎么办?即"双向绑定",如网络前端编程中的模型和视图.

有时它只是不可避免的,因为用户可以更改视图,后端(例如异步请求)可以更改模型,并且您希望另一方立即反映更改.

Mat*_*kci 2

扫描完论文后,我找不到他们在哪里提到它必须是非循环的。没有什么可以阻止您在数据流/反应式编程中创建循环图。非循环图仅允许您创建管道数据流(例如Unix命令行管道)。

反馈和循环是数据流中非常强大的机制。如果没有它们,您可以创建的程序类型将受到限制。看一下基于流的编程 - 循环类型网络


第二次发帖后编辑pagoda_5b

报纸上的一则声明让我注意到了……

对于正确排序的图,该过程单调地进行到更高的级别,从而确保数据一致性,即不存在故障。

对我来说,这说明 Scala.React 框架内不允许循环。两个节点之间的循环似乎会导致系统不断尝试永远提高两个节点的级别。

但这并不意味着您必须在其框架内对循环进行编码。可能有一个从您想要观察的项目出发的路径,然后是另一条单独的路径返回 GUI。

对我来说,似乎总是过分强调编程系统完成并给出一个答案。循环使得很难确定何时终止。使用“反应式”一词的图书馆倾向于认同这种思维过程。但这只是计算机冯·诺依曼架构的结果……解决方程并返回答案的焦点。避免循环的库似乎担心程序终止。

数据流不要求程序有一个正确答案或终止。由于此刻的输入,答案就是此时此刻的答案。如果不需要,则需要反馈和循环。数据流系统基本上只是一个在节点之间不断传递数据的大循环。要终止它,只需停止它即可。

数据流不必那么复杂。这只是一种非常不同的思考编程的方式。我建议您查看 J. Paul Morison 的书“基于流的编程”,了解数据流的现场测试版本或我的书(一旦完成)。