它可以起到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.
本文探讨了LazyVal在异常处理中的特殊行为,展示了它如何在catch块内重新计算其值,并解释了这种行为仅限于异常处理场景的原因。
3818

被折叠的 条评论
为什么被折叠?



