scala - RxScala 中 FRP 的 Event 和 Behavior 对应的概念是什么?

标签 scala haskell functional-programming reactive-programming rx-java

通过查看 Scaladoc RxScala 的我不清楚如何映射 Signal 的概念, Event and Behavior从 FRP 到 RxScala。

我还参加了 Coursera Reactive course但没有解释 FRP(如 Conal Elliott 所述)和 RxScala 之间的联系。我模糊的感觉是 RxScala 中的 Observable 对应于 FRP 中的行为/信号,但我不太确定。

有人可以解释一下如何将 Conal 的 FRP(Signal、信号转换器、事件、行为)的概念映射到 RxScala 中定义的概念/类(Future/Observable/Scheduler/Subject)吗?

最佳答案

Conal 的 Signal 相当于 wiki 的 Behavior,它们是 Time -> a 尽管 Behavior 有一个新的包装器。 Event 只是一个由 Maybe 组成的 Signal。

RxScala 的调度程序似乎是 FRP 实现/管道,与程序员用于构建 FRP 应用程序(GUI 或否)的接口(interface)没有直接关系。我敢打赌,很多 Haskell FRP 会利用非严格性来“安排” future 的事件,但这不利于 JVM 的性能(特别是),因此调度程序特性用于此目的。

RxScala 的 Observable trait 是 Signals 的通用接口(interface),可以直接由原始/基本 Signals 实现,即它们不是由其他信号组成的。 Observable 对象有点像工厂,有点像组合库,提供了将各种值提升到 FRP 框架的方法以及一些组合现有 Observable 实例的方法。

RxScala 的 Subject trait 用于用户定义的派生信号,即那些依赖于其他 Observable 的信号。要依赖 RxScala 中的 Observable,你必须实现 Observer。 Subject 只是在 Observer 和 Observable 的组合之上添加了两个方法——转换为 Java Rx 框架的函数。

由 Observable 对象的组合器产生的派生信号可以实现 Subject,但只能保证实现 Obervable。似乎主题专门用于当您有独特/自定义/不寻常的方式将传入通知“连接”到传出通知时,特别是如果它是有状态的。

HTH。这是我第一次不仅仅浏览 RxScala 文档,所以很可能我错过了一些东西。

关于scala - RxScala 中 FRP 的 Event 和 Behavior 对应的概念是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22624412/

相关文章:

scala - 如何在一个库中支持多个 Scala 版本

scala - 任意函数 - 根据输入生成返回类型

haskell - ZipList 可以是分布式的吗?

haskell - 如何使用 "Of"镜头? ( haskell )

javascript - 继续使用 mergeMap 在 RxJs pipeable 中出错

scala - 在编码用于生成类型 'X' 的项目容器的工厂时如何一般处理 Scala 高级类型

java - 是否可以在 Scala 中使用 Java 8 风格的方法引用?

Scala:扩展内部类,不引用外部类

dictionary - Haskell Data.Map 同时查找和删除

functional-programming - 在 OCaml 中反转 int