为什么我的功能无法与接收器一起使用

时间:2018-11-21 04:14:34

标签: kotlin

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()的调试过程中从未调用过,我的代码怎么了?

1 个答案:

答案 0 :(得分:2)

这行代码:

b.apply{ initFunc }   // doesn't do anything

不调用函数,它仅获取对函数的引用,对此不执行任何操作。添加()来调用该函数。

b.apply{ initFunc() } // works!

但是从技术上讲,如果您只是想更改通话的上下文(接收方),请使用with而不是apply

with (b) { initFunc() }