“正向引用扩展到价值定义”是什么意思在Scala中?

我不断得到

Forward reference extends over deFinition of value a

尝试编译我的应用程序(在SBT内部)出错。

a只是val a =“”,错误是通过在定义之前访问特定的(函数的)参数来触发的。该参数是一个简单的case类型,它具有Option […]类型的所有三个字段(Option [org.joda.time.DateTime]的2个)和枚举值的Option的1个)。

什么可以“前进参考扩展到价值定义”是什么意思,什么可以打击的方式?

解决方法

根据您的scalac版本,出现了合成方法导致此错误错误

https://issues.scala-lang.org/browse/SI-6278

插图,想象f被生成

object Test {
  def main(args: Array[String]) {
    class NotUsed {val x = f}
    val dummy = false
    def f = true
  }
}

案例类,认参数和隐式类涉及合成。

在该票证(已经修复)的示例代码中,您可以通过将隐式移动到函数的末尾来断开ok方法

object tiny {

  def main(args: Array[String]) {
    ok(); nope()
  }
  def ok() {
    class Foo(val i: Int) {
      def foo[A](body: =>A): A = body
    }
    implicit def toFoo(i: Int): Foo = new Foo(i)

    val k = 1
    k foo println("k?")
    val j = 2
  }
  def nope() {
    implicit class Foo(val i: Int) {
      def foo[A](body: =>A): A = body
    }

    val k = 1
    k foo println("k?")
    //lazy
    val j = 2
  }
}

what can be the ways to fight it?

代码中的注释所暗示的,使定义懒惰是一种解决方法

插图2,想象函数是如此之长,你不会注意到命名问题:

object Test {
  def main(args: Array[String]) {
    class NotUsed {val xs = args}
    val dummy = false
    // oops,shadows the parameter
    def args = Seq("a","b","c")
  }
}

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...