Я изучаю Scala.React и обновленный paper on the issue, пытаясь получить простой пример на основе Signal
.Запуск простого выражения Scala.React
Я понимаю, что метод 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
[email protected]
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 больше не поддерживается. Поэтому я очень неохотно его использую. – Madoc
У меня такая же проблема при получении простого примера выполнения, см. [Простой пример для Scala React] (http://stackoverflow.com/questions/19386516/simple-example-for-scala-react) –
@Madoc Да, я не стал бы делать ставку на производство, я просто пытался это сделать. Насколько я знаю, плагин компилятора CPS будет оставлен. Вероятно, лучше всего ждать, пока Халлер/Миллер опубликует исходный код [RAY] (http://infoscience.epfl.ch/record/188383/) –