加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 09:36:20 所属栏目:安全 来源:网络整理
导读:我不断得到 Forward reference extends over definition of value a 尝试编译我的应用程序(在SBT内部)出错。 a只是val a =“”,错误是通过在定义之前访问特定的(函数的)参数来触发的。该参数是一个简单的case类型,它具有Option […]类型的所有三个字段(Opt
我不断得到

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")
  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读