Подтвердить что ты не робот

Почему использование неинициализированных переменных допускается в Scala?

Возможный дубликат:
Вперед ссылки - почему этот код компилируется? Scala и пересылаемые ссылки

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

Это будет печатать 4, поскольку c, по-видимому, 0, когда назначается b. a и c - значения, поэтому они не должны быть 0 за один момент, а 5 в следующем. В Scala они должны быть неизменными, правильно?

Должен ли я хотя бы получить какое-то предупреждение? Конечно, в приведенном выше примере вы должны быть идиотом, чтобы его пропустить, но в более сложных случаях трудно сказать, в каком порядке его поставить.

Я, конечно, знаю, что могу использовать lazy val b = ..., но что, если я думаю, что поставил его в правильном порядке, когда у меня этого действительно нет. Разве это не опасно, черт возьми, вообще не получая никакого предупреждения? Это работает просто отлично!? Как это передается как Scala IDE, так и компилятор? Это специально? Или это ошибка, которая не может быть исправлена?:/

:)

4b9b3361