【问题标题】:Scala compilation issue "forward reference extends over definition of value"Scala 编译问题“前向引用扩展了值的定义”
【发布时间】:2021-03-14 20:18:14
【问题描述】:

下面的sn-p只有在方法级实现时才会发生编译错误,在main中定义时不会发生错误。有什么不同 ?使用的 Scala 版本是 2.13.5。

class FibonacciGenerator  {
  def generate(total: Int): List[Int] = {
    val fibSeries: LazyList[Int] = LazyList.cons(1, LazyList.cons(1, fibSeries.zip(fibSeries.tail).map { t => t._1 + t._2 }))
    fibSeries.take(total).toList
  }
}

同样的实现在下面不会失败。

object Misc extends App {

  val x: LazyList[Int] = LazyList.cons(1, LazyList.cons(1, x.zip(x.tail).map{t => t._1 + t._2}))
  println(x)
  println(x.take(10).toList)

【问题讨论】:

    标签: scala lazy-evaluation scala-2.13


    【解决方案1】:

    不同之处在于,在后一种情况下,您使用的是 lazily 创建的对象

    一个对象...在被引用时是惰性创建的,就像惰性验证一样。

    在第一种情况下,如果您声明 lazy val fibSeries,它应该可以工作。

    【讨论】:

      猜你喜欢
      • 2015-10-15
      • 1970-01-01
      • 2011-10-15
      • 2018-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-08
      • 1970-01-01
      相关资源
      最近更新 更多