[英]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.