小编典典

Kotlin:如何将一个函数作为参数传递给另一个函数?

all

给定函数 foo :

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

我们能做的:

foo("a message", { println("this is a message: $it") } )
//or 
foo("a message")  { println("this is a message: $it") }

现在,假设我们有以下功能:

fun buz(m: String) {
   println("another message: $m")
}

有没有办法可以将 “buz” 作为参数传递给 “foo” ?就像是:

foo("a message", buz)

阅读 131

收藏
2022-05-23

共1个答案

小编典典

用于::表示函数引用,然后:

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

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

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

从 Kotlin 1.1开始,您现在可以使用作为类成员的函数(“ Bound Callable References
”),方法是在函数引用运算符前面加上实例:

foo("hi", OtherClass()::buz)

foo("hi", thatOtherThing::buz)

foo("hi", this::buz)
2022-05-23