簡體   English   中英

Scala流:自我引用,函數調用和延遲評估

[英]Scala Streams: Self-Reference, Function Calls and Lazy Evaluation

我試圖了解為什么使用Scala Streams的以下代碼不起作用:

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 )

效果很好。

我正在尋找一種解決方案,該解決方案可以讓我在函數內部對流進行包裝,而不會破壞流是自引用時的惰性計算。

在你的第一個版本,您的通話實例SimNumericStream是一個實例內SimNumericStream ,所以你可以從來沒有真正intantiate一個,除非你有一個已經。

我已經通過以下方式達到了我想要的效果:

  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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM