【发布时间】:2013-06-20 15:12:35
【问题描述】:
我正在研究Scala.React 和更新的paper on the issue,试图让一个简单的基于Signal 的示例工作。
据我了解,论文中的Signal方法并不存在,而是有Strict和Lazy。所以我天真的第一次尝试:
设置整个事情:
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$
【问题讨论】:
-
我很想进入响应式编程,但我的印象是 Scala.React 不再维护了。所以,我很舍不得用。
-
我在运行一个简单的示例时遇到了同样的问题,请参阅Simple Example for Scala React
-
@Madoc 是的,我不会赌它用于生产,我只是在尝试。据我所知,CPS 编译器插件也将被放弃。可能最好等 Haller/Miller 发布RAY的源代码
-
@0__ 感谢您的提示!
标签: scala reactive-programming