运行简单的Scala.React表达式
我正在研究和更新,试图得到一个简单的基于<代码>信号代码>的示例 据我所知,本文中的运行简单的Scala.React表达式,scala,reactive-programming,Scala,Reactive Programming,我正在研究和更新,试图得到一个简单的基于信号的示例 据我所知,本文中的信号方法本身并不存在,而是有严格和惰性。所以我天真的第一次尝试: 设置整个事件: object dom extends scala.react.Domain { val engine = new Engine val scheduler = new ManualScheduler } import dom._ 试编: val v1, v2 = Var(0) val f = Strict { v1() + v2
信号
方法本身并不存在,而是有严格
和惰性
。所以我天真的第一次尝试:
设置整个事件:
object dom extends scala.react.Domain {
val engine = new Engine
val scheduler = new ManualScheduler
}
import dom._
试编:
val v1, v2 = Var(0)
val f = Strict { v1() + v2() }
第二条线与另一条线相撞
java.lang.AssertionError: assertion failed: This method must be run on its domain
scala.react.NilDebug@4eaf6cb1
at scala.Predef$.assert(Predef.scala:179)
at scala.react.Debug.assertInTurn(Debug.scala:37)
at scala.react.EngineModule$Propagator.defer(EngineModule.scala:120)
...
所以我一定是做错了什么。但是什么呢
第二次尝试:
scala> dom.start()
scala> var v1, v2, f = (null: Signal[Int])
v1: dom.Signal[Int] = null
v2: dom.Signal[Int] = null
f: dom.Signal[Int] = null
scala> schedule { v1 = Var(0); v2 = Var(0) }
scala> schedule { f = Strict { v1() + v2() }}
scala> engine.runTurn()
scala> schedule { println(f.now) }
scala> engine.runTurn()
Uncaught exception in turn!
scala.react.EngineModule$LevelMismatch$
好的,首先我们应该使用
Lazy
而不是Strict
,因为Strict
需要在预定的回合内运行
以下是我的新尝试。不确定这是否是它的意图,但它是有效的:
object Test extends scala.react.Domain with App {
val engine = new Engine
val scheduler = new ManualScheduler
val v2 = Var(0)
val v1 = Lazy { v2() + 10 }
val f = Lazy { v1() + v2() }
start()
schedule {
new Observing {
observe(f) { p =>
println(s"Observed: $p")
}
}
v2() = 5
}
runTurn()
}
我很想进入反应式编程,但我的印象是Scala.React不再被维护。因此,我非常不愿意使用它。我在获得一个简单的examle running时也有同样的问题,请看@Madoc Yes,我不会在生产中打赌,我只是在尝试。据我所知,CPS编译器插件也将被放弃。也许最好是等待Haller/Miller发布@0的源代码。谢谢你的提示!