Kotlin-具有多个参数的内联函数

时间:2018-12-08 20:12:16

标签: kotlin

我可以使用以下命令在Kotlin中定义内联函数:

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

但是我怎么调用这个函数呢?

对于只有一个参数的普通内联函数,我将使用:

func {
    doSomething()
}

具有多个内联参数的函数是否有类似的语法?

2 个答案:

答案 0 :(得分:1)

仅最后一个函数参数传递给调用运算符。 例如: fun foo(a:()-> Unit,b:()-> Unit) foo({println(“ hello”)}){     println(“ world”) } 其他函数参数仅在括号内的常规参数列表中传递,可以像大多数调用一样将最后一个参数移到括号之外。

答案 1 :(得分:1)

有几种方法可以实现此目的。 最好的方法是在最后一个参数之前使用bound function reference作为参数:

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