为什么在Scala中允许使用未初始化的变量?

kor*_*dge 10 jvm scala forward-reference

可能重复:
转发引用 - 为什么这段代码会编译?
Scala和前向引用

object Main extends App {
  val a = 4
  val b = a + c
  val c = 5
  println(b) // => 4
}
Run Code Online (Sandbox Code Playgroud)

这将打印4作为c显然是0b被分配.a并且c是价值观,因此它们不应该0在一个时刻,而5在下一个时刻.在Scala中,它们应该是不可变的,对吧?

我不应该至少得到某种警告吗?当然,在上面的例子中,你必须是一个想念的白痴,但在更复杂的情况下,很难说出它的顺序.

我当然知道我可以使用,lazy val b = ...但如果我认为我把它按正确的顺序排列,当我真的没有时.不是很危险,因为根本没有得到任何警告吗?运行得很好!?这是如何获得通过两者的Scala IDE 编译器?这是故意的吗?或者这是一个无法修复的错误?:/

:)