Brauchen Sie Hilfe mit Fortsetzungen-Fehler „gefunden cps Expression in nicht-cps-Position“

StackOverflow https://stackoverflow.com/questions/2646093

  •  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( () )
      ()
    }
}
War es hilfreich?

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
scroll top