Почему моя функция не работает с приемником - PullRequest
0 голосов
/ 21 ноября 2018
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()

Я обнаружил, что функция init внутри B никогда не вызывается во время отладки test (), что не так с моим кодом?

1 Ответ

0 голосов
/ 21 ноября 2018

Эта строка вашего кода:

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

Не вызывает функцию, она просто получает ссылку на функцию и ничего с ней не делает.Добавьте () для вызова функции.

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

Но технически, если вы просто хотите изменить контекст (получателя) вызова, используйте with вместо apply:

with (b) { initFunc() }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...