加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – Reactive编程和普通旧封闭有什么区别?

发布时间:2020-12-16 09:56:42 所属栏目:安全 来源:网络整理
导读:scala.rx的示例: import rx._val a = Var(1); val b = Var(2)val c = Rx{ a() + b() }println(c()) // 3a() = 4println(c()) // 6 以上版本如何比以下更好: var a = 1; var b = 2def c = a + bprintln(c) // 3a = 4println(c) // 6 我唯一能想到的是第一个
scala.rx的示例:

import rx._
val a = Var(1); val b = Var(2)
val c = Rx{ a() + b() }
println(c()) // 3
a() = 4
println(c()) // 6

以上版本如何比以下更好:

var a = 1; var b = 2
def c = a + b
println(c) // 3
a = 4
println(c) // 6

我唯一能想到的是第一个例子是高效的,除非a或b改变,c不重新计算,但在我的版本中,每次调用c()时都会重新计算c,但这只是一个特例memoization的大小= 1,例如我可以这样做以防止使用memoization macro进行重新计算:

var a = 1; var b = 2
@memoize(maxSize = 1) def c(x: Int = a,y: Int = z) = x + y

在某些情况下,是否有任何我想要了解反应性编程的内容,以便深入了解为什么它可能是一个更好的范例(而不是memoized闭包)?

解决方法

问题:这是一个糟糕的例子

网页上的示例没有很好地说明Scala.RX的用途.从这个意义上说,这是一个非常糟糕的例子.

什么是Scala.RX?

这是关于通知

Scala.Rs的想法是,当数据发生变化时,一段代码可以获得通知.通常,此通知用于(重新)计算取决于更改数据的结果.

Scala.RX自动化布线

当计算超过多个阶段时,很难跟踪哪个中间结果取决于哪个数据以及哪个其他中间结果.此外,必须以正确的顺序重新计算中间结果.

你可以把它想象成一个大的excel表,它必须是相互依赖的公式.当您更改其中一个输入值时,Excel必须弄清楚,必须以哪个顺序重新计算工作表的哪些部分.当Excel重新计算所有已更改的单元格时,它可以更新显示.

Scala.RX可以做与Excel类似的事情:它跟踪公式如何相互依赖,通知需要以正确顺序更新的公式.

目的:MVC

Scala.RX是一个很好的工具来实现MVC模式,特别是当你有业务应用程序,你也可以带来excel.

还有一个适用于Scala.js的变体,即在浏览器中作为HTML站点的一部分运行.如果您想根据服务器上的更改或用户的编辑动态更新HTML页面的某些部分,这非常有用.

限制

当您有大量输入数据时Scala.RX doe不会缩放,例如:对巨大矩阵的操作.

一个更好的例子

import rx._
import rx.ops._

val a = Var(1); val b = Var(2)
val c: Rx[Int] = Rx{ a() + b() }

val o = c.foreach{value =>
  println(s"c has a new value: ${value}")
}

a()=4
b()=12
a()=35

为您提供以下输出:

c has a new value: 3 
c has a new value: 6 
c has a new value: 16 
c has a new value: 47

现在想象一下,不是打印值,而是刷新UI或HTML页面的部分控件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读