1

ScalaStreamsを使用した次のコードが機能しない理由を理解しようとしています。

def main(args: Array[String]): Unit = {
  lazy val y : SimNumericStream = y.shift
  y.scalstream.take(10).print
}

class SimNumericStream( ss : Stream[Double] )  {  
  lazy val scalstream = ss
  lazy val shift = new SimNumericStream( 0 #:: scalstream )
}

まだ交換

lazy val y : SimNumericStream = y.shift 

lazy val y : SimNumericStream = new SimNumericStream( 0 #:: y.scalstream )

うまく動作します。

ストリームが自己参照である場合に遅延評価を中断することなく、関数内のストリームに対する操作をまとめることができるソリューションを探しています。

4

2 に答える 2

4

最初のバージョンでは、インスタンス化の呼び出しはSimNumericStreamのインスタンス内にあるSimNumericStreamため、既にインスタンス化されていない限り、実際にインスタンス化することはできません。

于 2012-04-25T13:26:31.253 に答える
0

私は以下を通して私が望む効果を達成しました:

  class SimNumericStream(str: =>Stream[Double]) {
    def ::(hd: Double) = Stream.cons(hd, str)
    def shift = 0.0 :: this
  }
  implicit def streamToSimNumericStream(str: =>Stream[Double]) = new SimNumericStream(str)

  lazy val y: Stream[Double] = y.shift
于 2012-04-27T09:08:31.993 に答える