我不断得到
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") } }