class A {
var initFunc: B.() -> Unit
fun initWith(func: B.() -> Unit) {
this.initFunc = func
}
fun test() {
val b = B()
b.apply{ initFunc }
}
}
class B {
fun init() {...}
}
...
val a = A()
a.initWith{ init() }
a.test()
我发现在测试((的调试过程中从未调用过B中的函数init,我的代码出了什么问题?
这行代码:
b.apply{ initFunc } // doesn't do anything
不调用函数,它只获取对函数的引用,对它不做任何操作。添加()
即可调用该函数。
b.apply{ initFunc() } // works!
但从技术上讲,如果您只是想更改呼叫的上下文(接收方(,请使用with
而不是apply
:
with (b) { initFunc() }