它可以起到var的部分作用,但又不可以被程序员手工重新赋值。
int x = 0;
lazy val value = 1/x
try{ println(value) }
catch{
case _ => x = 1
println(value)
}
可以在catch块中正确输出1,因为这时value重新计算为1/1.
但是重新计算只能发生在异常时的异常处理中:
var x = 1;
lazy val value = 10 / x
for (x <- 1 to 10) {
println(value)
}
这个就不会重新计算value的值,只会连续输出10.