10

可能重复:
前向引用 - 为什么此代码编译?
Scala 和前向引用

object Main extends App {
  val a = 4
  val b = a + c
  val c = 5
  println(b) // => 4
}

这将打印4c显然是分配0时。和是价值观,所以它们不应该在一个时刻出现,在下一刻出现。在 Scala 中,它们应该是不可变的,对吧?bac05

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

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

:)

4

0 回答 0