我很確定這是一件非常簡單的事情,但如果你能讓我清楚為什么在下面的代碼片段中第三個 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
標籤:斯卡拉
