Kotlin - встроенные функции с несколькими параметрами - PullRequest
0 голосов
/ 08 декабря 2018

Я могу определить встроенную функцию в Kotlin с помощью:

inline fun func(a: () -> Unit, b: () -> Unit){
    a()
    b()
}

Но как мне вызвать эту функцию?

Для обычной встроенной функции только с одним параметром я бы использовал:

func {
    doSomething()
}

Существует ли аналогичный синтаксис для функций с несколькими встроенными параметрами?

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Есть несколько способов добиться этого.Вероятно, лучше всего использовать связанную функцию-ссылку для параметров до последнего:

fun foo(){
    func(::foo){foo()}
    //this also works:
    func(::foo, ::foo)
    //or place the other call within parentheses in a lambda. (you can only put the last lambda behind the method call.
    func( { foo() } ){foo()}
}

inline fun func(a: () -> Unit, b: () -> Unit){
    a()
    b()
}

Если вы хотите вызвать метод объектов, просто поместите это имя объекта перед::

class Bar {
    val baz = Baz()

    fun foo() {
        func(baz::func2, ::foo)
    }

    fun func(a: () -> Unit, b: () -> Unit) {
        a()
        b()
    }
}

class Baz{
    fun func2(){}
}
0 голосов
/ 08 декабря 2018

Только последний параметр функции передается вне оператора вызова.Например:

fun foo(a: () -> Unit, b: () -> Unit)

foo({ println("hello") }) {
    println("world")
}

Остальные параметры функции просто передаются в обычном списке аргументов внутри скобок, последний может опционально перемещаться за пределы этих скобок, как это делается с большинством вызовов.

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