繁体   English   中英

Scala中Val、def、lazy val之间的实例化顺序

[英]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在其初始化时评估。 所以:

  1. val v对其初始化进行评估并打印 v
  2. 接下来, var s被初始化并被分配d ,它评估def d并因此打印 d
  3. 然后, lazy val l被分配给s - 这是l第一次被使用,所以这是它被评估并打印 l的时候。
  4. v分配给s不会打印任何内容,因为值 (3) 是在v初始化期间存储的(-> 步骤 1)。
  5. l重新分配给s不会打印任何内容,因为值 (5) 是在l的初始化期间存储的(这在第 3 步中第一次使用时发生)。
  6. d重新分配给s打印 d ,因为ddef ,因此每次调用时都会重新计算。

(注意:因为您使用的是+= ,所以写“ s + x is assigned to s ”会更精确,我刚刚写的是“ x is assigned to s ”,但对于手头的问题(为什么要打印东西) ,无论你做v += x还是v = x都没有关系。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM