2010-04-15 49 views
2

我嘗試使用Scala 2.8 Continuations-PlugIn構建以下簡單的生成器。 以下錯誤來自哪裏?需要Continuations-Error的幫助「在非cps位置找到cps表達式」

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) 

代碼:

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(()) 
    () 
    } 
} 

回答

1

那些yieldValue呼叫gen的構造,這是不允許的(我認爲)內發生的事情。啊,我只注意到你打算將它們作爲構造函數參數。那麼,不幸的是,該語法只適用於方法。我不確定你在這裏還沒有得到另一個錯誤。

+0

謝謝,我創建了一個關於構造函數的名稱參數的問題:http://stackoverflow.com/questions/264714​​1/by-name-parameters-for-constructors – hotzen 2010-04-15 16:31:59

+0

它真的好像不被編譯器 - 插件,通過stackoverflow查詢tiark的任何機會? – hotzen 2010-04-16 18:18:50