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在test()的调试过程中从未调用过,我的代码怎么了?
答案 0 :(得分:2)
这行代码:
b.apply{ initFunc } // doesn't do anything
不调用函数,它仅获取对函数的引用,对此不执行任何操作。添加()
来调用该函数。
b.apply{ initFunc() } // works!
但是从技术上讲,如果您只是想更改通话的上下文(接收方),请使用with
而不是apply
:
with (b) { initFunc() }