簡體   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