Возможный дубликат:
Вперед ссылки - почему этот код компилируется? 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, так и компилятор? Это специально? Или это ошибка, которая не может быть исправлена?:/
:)