繁体   English   中英

FRP 中的行为和事件有什么区别?

[英]What's the difference between Behavior and Event in FRP?

我目前正在阅读WebSharper的文档。 关于 FRP 的部分中,它指出:

函数式反应式编程 (FRP) 通常为事件流提供Event 类型,为时变值提供 Behavior 类型,以及这些方面的有用组合器。

...

但是,目前我们决定避免实施 FRP。 相反,我们专注于功能的子集,定义与行为类似的随时间变化的视图值,但不支持实时采样。 事件流留给用户使用回调或第三方库来处理。 这是对 FRP 的极大简化,并且更容易有效实施。

随着弱指针在 JavaScirpt 中可用,这个决定可能会被修改,特别是考虑到 OCaml React 的成功。

在不久的将来,我们打算提供 Concurrent ML 组合器,以更好地支持处理事件流并改进组件的组合。

但是,我不确定此处描述的“事件类型”和“行为类型”之间究竟有什么区别。 我在谷歌上搜索了一些文章/教程,但它们似乎也不是很明确。

我不确定在 WebSharper 的实现中没有“事件”会错过什么。

对不起,如果这个问题听起来很基础。 我不熟悉与 FRP 相关的概念。

——

编辑:我想我在FRP - 事件流和信号 - 仅使用信号会丢失什么? . 要点是:

  1. 事件流允许累积更新,而行为只能取决于观察元素的当前值。

  2. 如果事件和行为都被实现,它们允许在系统内递归。

事件行为之间的区别可以追溯到关于Functional Reactive Animations (PDF) 的第一篇论文,它很好地解释了这种区别。 这个想法是:

  • 行为代表随时间变化的值 - 例如,鼠标 X 坐标随时间变化,但它始终具有某些值。

  • 事件代表系统中的离散事件——它们不时发生并且可以触发一些变化,但并不总是具有价值。 例如,可能会发生鼠标单击,但您不能询问“单击的当前值是多少”。

这些作为理论思想非常好,因为你可以用行为和事件做不同的事情,并且它们很好地捕捉了反应系统中不同类型事物背后的一些直觉。

但在实践中,实现起来非常棘手——“行为”的大多数表示最终都使用采样,因此它们的行为很像离散事件(也许因为计算机就是这样工作的?),因此只有少数系统实际上遵循原始的严格区别.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM