Объем имени, введенного декларацией или определением, является целая последовательность операторов, содержащая привязку. Однако существует ограничение на прямые ссылки в блоках: в последовательности операторов
s[1]...s[n]
составляющий блок, если простое имя вs[i]
относится к объект, определенныйs[j]
, гдеj >= i
, то для всехs[k]
между иs[i]
иs[j]
,
s[k]
не может быть определением переменной.- Если
s[k]
- это определение значения, оно должно бытьlazy
.
Изменить: Я не уверен, что ответ Микаэля Майера на самом деле объяснил все. Рассмотрим:
object Test {
def main(args: Array[String]) {
println(x)
lazy val x: Int = 6
}
}
Здесь ленивое значение x
обязательно должно быть прочитано/оценено до того, как оно будет определено в коде! Что противоречило бы Микаэлю, утверждают, что ленивая оценка устраняет необходимость оценивать вещи до их определения.