我很確定這是一件非常簡單的事情,但如果你能讓我清楚為什么在下面的代碼片段中第三個 println(p()) 回傳 10 而不是 11。最終輸出是5 8 10 7,除了回傳 10 的那一刻,我都理解。
class A(var x : Int) {
def f() : () => Int = {
var y : Int = 1
() => {y = y 2; y x}
}
}
object ClosureM2 {
def main(args : Array[String]) : Unit = {
var a = new A(2)
var p = a.f()
println(p())
a.x = 3
println(p())
a = new A(4)
println(p())
p = a.f()
println(p())
}
}
uj5u.com熱心網友回復:
看起來您a
被重新分配到的位置發現了A(4)
。
當我們分配f()
給變數p
時,p
被設定為f()
類內部的函式A
,而不是變數a
:
var a = new A(2)
var p = a.f()
這意味著當a
被重新分配時a = new A(4)
,p
并不指向A
我們分配給的新的a
。它仍然指向前一個實體A
。
因此,當p()
再次呼叫時,它會計算為7 A(x = 3)
which 的計算結果10
。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/519544.html
標籤:斯卡拉