2010-04-19 53 views
7

在CPS上下文中具有以下类(@cps [Unit]),我将如何实现Seq特征? 我是否必须将Seq这样的标准特质放在一边,只是在cps-context中实现map,flatmap和foreach?为CPS类实现Seq [T]

class DataFlowVariable[T] { 
    def apply(): T @cps[Unit] = ... 
} 

class DataFlowStream[T] extends Seq[T] { 

    override def iterator: Iterator[T] = new Iterator[T] { 
    private val iter = queue.iterator 
    def hasNext: Boolean = iter.hasNext 
    def next: T = { // needed: next: T @cps[Unit] ! 
     val dfvar = iter.next 
     // dfvar() // not possible as dvar.apply has type "T @cps[Unit]" 
    } 
    } 
} 
+0

我的问题太神秘了吗?综上所述:由于所有在CPS-context中工作的函数都需要返回一个用cps [X]注释的类型,因此我无法实现像Seq这样的标准Traits/Interfaces,因为它们的签名缺少这些@ cps-annotations。它是否正确? – hotzen 2010-05-03 14:54:32

回答

1

好吧,据我看来,似乎实现像Seq接口/特征是不可能的。 但是,由于Scala将for语法糖循环重写为普通的foreach/map-calls,所以只需执行mapforeach以及所需的cps注释即可。 过滤器& co应该也能工作。

然而,有关如何在cps-context中实现特征的任何建议都非常感谢。

相关问题