给定函数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)
使用::表示函数引用,然后:
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开始,你现在可以使用作为类成员的函数(“绑定可调用引用”),方法是在函数引用操作符前加上实例:
foo("hi", OtherClass()::buz)
foo("hi", thatOtherThing::buz)
foo("hi", this::buz)
Jason Minard的回答很好。这也可以使用lambda来实现。
fun foo(m: String, bar: (m: String) -> Unit) {
bar(m)
}
val buz = { m: String ->
println("another message: $m")
}
可以用foo("a message", buz)调用。
您还可以使用类型别名使其更加DRY。
typealias qux = (m: String) -> Unit
fun foo(m: String, bar: qux) {
bar(m)
}
val buz: qux = { m ->
println("another message: $m")
}