7

CPS コンテキスト (@cps[Unit]) にある次のクラスを使用すると、Seq 特性をどのように実装できますか? Seq のような標準的な特性を脇に置き、cps-context で map、flatmap、および foreach を実装する必要がありますか?

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]"
    }
  }
}
4

1 に答える 1

1

OK、私が得た限りでは、インターフェース/特性の実装Seqは不可能のようです。ただし、Scala は構文糖ループを通常の foreach/map 呼び出しに書き直すため、必要な cps アノテーションを実装forするだけでうまく機能します。filter & co も同様に機能するはずです。mapforeach

ただし、cps-context で特性を実装する方法についてのアドバイスは大歓迎です。

于 2010-05-13T17:56:36.907 に答える