[英]Order of instantiation between Val, def, lazy val in Scala
任何人都可以告诉我这如何解决 vdld pleeease 吗?
def deflazyval() : Unit = {
lazy val l : Int ={print("l") ; 5}
def d : Int ={print("d") ; 7}
val v : Int ={print("v") ; 3}
var s : Int = d
s += l
s += v
s += l
s += d
}
def
每次使用时都会重新评估, lazy val
在第一次使用时评估, val
在其初始化时评估。 所以:
val v
对其初始化进行评估并打印 v 。var s
被初始化并被分配d
,它评估def d
并因此打印 d 。lazy val l
被分配给s
- 这是l
第一次被使用,所以这是它被评估并打印 l的时候。v
分配给s
不会打印任何内容,因为值 (3) 是在v
初始化期间存储的(-> 步骤 1)。l
重新分配给s
不会打印任何内容,因为值 (5) 是在l
的初始化期间存储的(这在第 3 步中第一次使用时发生)。d
重新分配给s
打印 d ,因为d
是def
,因此每次调用时都会重新计算。 (注意:因为您使用的是+=
,所以写“ s + x
is assigned to s
”会更精确,我刚刚写的是“ x
is assigned to s
”,但对于手头的问题(为什么要打印东西) ,无论你做v += x
还是v = x
都没有关系。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.