Как определить функцию, которую я передаю как параметр как обнуляемый? - PullRequest
2 голосов
/ 18 апреля 2020

Согласно этому ответу я могу передать функцию в качестве параметра

{ ссылка }

fun foo(m: String, bar: (m: String) -> Unit) {
    bar(m)
}

// my function to pass into the other
fun buz(m: String) {
    println("another message: $m")
}

// someone passing buz into foo
fun something() {
    foo("hi", ::buz)
}

Итак, на самом деле есть два вопроса

  1. Если возможно, определить функцию bar как обнуляемую, чтобы иметь перегрузку для этого метода.
  2. Как передать функцию не из текущего класса? например foo("test", myOtherObj.myTestMethod())?

1 Ответ

3 голосов
/ 18 апреля 2020

Вот как я это сделал:

fun foo(m: String, bar: ((m: String) -> Unit)?) {
    bar?.invoke(m)
}

// my function to pass into the other
fun buz(m: String) {
    println("top level fun: $m")
}

class MyClass() { 
    fun buz(m: String) {
        println("instance fun: $m")
    }
}

fun main() {
    foo("hi", ::buz)

    val myInstance = MyClass()
    foo("hi", myInstance::buz)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...