“正向引用扩展到价值定义”是什么意思在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 } }
如代码中的注释所暗示的,使定义懒惰是一种解决方法。 插图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") } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |