关键字 【定义时 】 【 变量值】
class A(
var b: B = B(1),
var c: () -> Unit = {
Log.e("test", "${b.v}")
}
) {
fun d() {
Log.e("test", "${b.v}")
}
}
class B(val v: Int)
fun test() {
val a = A()
a.b = B(2)
a.c()
a.d()
val e = A(b = B(3))
e.c()
e.d()
}
上面的代码运行时,会输出 1,2,3,3
因为c对应的lambda在A 已经捕获"B(1)"这个对象的地址。始终使用的是B(1)