给定函数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)
6 回答
使用
::
表示函数引用,然后:Since Kotlin 1.1您现在可以使用类成员函数(“绑定可调用引用”),方法是在函数引用运算符前面添加实例:
关于成员函数作为参数:
Kotlin类没有't support static member function, so the member function can'被调用如:Operator :: add(5,4)
因此,成员函数不能与First-class函数一样使用 .
一个有用的方法是用lambda包装函数 . 它不优雅,但至少它是有效的 .
码:
显然这还不支持 .
更多信息:
http://devnet.jetbrains.com/message/5485180#5485180
http://youtrack.jetbrains.com/issue/KT-1183
Just use "::" in front of method name as parameter
科特林1.1
this :: buz(如果在同一个类中)或Class():: buz如果不同
Kotlin目前不支持一流的功能 . 关于这是否是一个很好的补充功能一直存在争议 . 我个人认为应该这样做 .