为什么我的功能不适用于接收器


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() }

最新更新