可能重复:
前向引用 - 为什么此代码编译?
Scala 和前向引用
object Main extends App {
val a = 4
val b = a + c
val c = 5
println(b) // => 4
}
这将打印4c
显然是分配0
时。和是价值观,所以它们不应该在一个时刻出现,在下一刻出现。在 Scala 中,它们应该是不可变的,对吧?b
a
c
0
5
我不应该至少得到某种警告吗?当然,在上面的例子中,你必须是一个白痴才能错过它,但在更复杂的情况下,很难说出它的顺序。
我当然知道我可以使用lazy val b = ...
,但是如果我认为我已经把它按正确的顺序排列了怎么办,而我真的没有。根本没有收到任何警告,这不是很危险吗?这运行得很好!?这如何通过Scala IDE和编译器?是故意的吗?或者它是一个无法修复的错误?:/
:)