Brauchen Sie Hilfe mit Fortsetzungen-Fehler „gefunden cps Expression in nicht-cps-Position“
-
27-09-2019 - |
Frage
Ich versuche, den Aufbau der folgenden einfachen Generator die Scala 2.8 Fortsetzungen-Plugin. Wo kommt der folgende Fehler kommen aus?
None/None/Some((Unit,Unit))
GenTest.scala:8: error: found cps expression in non-cps position
yieldValue(1)
None/None/Some((Unit,Unit))
GenTest.scala:9: error: found cps expression in non-cps position
yieldValue(2)
None/None/Some((Unit,Unit))
GenTest.scala:10: error: found cps expression in non-cps position
yieldValue(3)
Code:
import scala.util.continuations._
object GenTest {
val gen = new Generator1[Int] {
yieldValue(1)
yieldValue(2)
yieldValue(3)
}
def main(args: Array[String]): Unit = {
for (v <- gen) {
println(v)
}
}
}
class Generator1[E](gen: => Unit @cps[Unit]) {
var loop: (E => Unit) = null
def foreach(f: => (E => Unit)): Unit = {
loop = f
reset[Unit,Unit]( gen )
}
def yieldValue(value: E): Unit @cps[Unit] =
shift { genK: (Unit => Unit) =>
loop( value )
genK( () )
()
}
}
Lösung
Diese yieldValue
Anrufe innerhalb gen
Konstruktor geschehen, was nicht erlaubt ist (ich nehme an). Ah, ich habe gerade bemerkt, dass Sie beabsichtigt sie der Konstruktor Parameter zu sein. Nun, leider, dass Syntax funktioniert nur mit Methoden. Ich bin nicht sicher, dass Sie nicht bekommen, einen anderen Fehler auch hier.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow