微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

“正向引用扩展到价值定义”是什么意思在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")
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐