给定函数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)

当前回答

关于作为形参的成员函数:

Kotlin类不支持静态成员函数,因此不能像这样调用成员函数: 接线员::添加(5,4) 因此,成员函数不能像头等函数那样使用。 一个有用的方法是用lambda来包装函数。它并不优雅,但至少在工作。

代码:

class Operator {
    fun add(a: Int, b: Int) = a + b
    fun inc(a: Int) = a + 1
}

fun calc(a: Int, b: Int, opr: (Int, Int) -> Int) = opr(a, b)
fun calc(a: Int, opr: (Int) -> Int) = opr(a)

fun main(args: Array<String>) {
    calc(1, 2, { a, b -> Operator().add(a, b) })
    calc(1, { Operator().inc(it) })
}

其他回答

Kotlin目前不支持第一类函数。关于这是否是一个好的功能存在争论,我个人认为他们应该这样做。

关于作为形参的成员函数:

Kotlin类不支持静态成员函数,因此不能像这样调用成员函数: 接线员::添加(5,4) 因此,成员函数不能像头等函数那样使用。 一个有用的方法是用lambda来包装函数。它并不优雅,但至少在工作。

代码:

class Operator {
    fun add(a: Int, b: Int) = a + b
    fun inc(a: Int) = a + 1
}

fun calc(a: Int, b: Int, opr: (Int, Int) -> Int) = opr(a, b)
fun calc(a: Int, opr: (Int) -> Int) = opr(a)

fun main(args: Array<String>) {
    calc(1, 2, { a, b -> Operator().add(a, b) })
    calc(1, { Operator().inc(it) })
}

只需在方法名之前使用“::”

fun foo(function: () -> (Unit)) {
   function()
}

fun bar() {
    println("Hello World")
}

输出:Hello World (::bar

另一个例子:

 fun foo(x:Int, Multiply: (Int) -> (Int)) {
    println(Multiply(x))
 }
 fun bar(x:Int):Int{
    return  x * x
 }
 foo(10, ::bar)

Kotlin 1.1

使用::引用方法。

like

    foo(::buz) // calling buz here

    fun buz() {
        println("i am called")
    }