为什么我可以使用lambda表达式的名称,但不能使用函数的名称?

时间:2017-12-21 23:02:35

标签: intellij-idea lambda functional-programming kotlin

我可以使用“小”函数定义“大”函数:

fun apply3(a:Int, b:Int, c:Int, func: (Int,Int,Int)->Int ): Int{
    return func(a,b,c)
}

我可以这么称呼它:

println(apply3(1,2,3,{a,b,c->a+b+c}))

另一方面,如果我想多次使用相同的功能并使用它的名称,我有问题:

val plus1: (Int,Int,Int)->Int = {a,b,c->a+b+c}  //this is OK
...
fun plus2(a:Int, b:Int, c:Int)=a+b+c    // this too
...
println(apply3(1,2,3,plus1))    // this is allowed
...
println(apply3(1,2,3,plus2))    // this is NOT allowed

最后一行是禁止的。有消息:

Type mismatch
Required: (Int,Int,Int)->Int
Found: Int

为什么呢?对我来说,plus2和plus2是一样的东西?

This post有一个答案建议在我的情况下使用:: plus2。这在技术上有所帮助,但没有解释这两个功能之间的区别。

1 个答案:

答案 0 :(得分:4)

您需要使用function reference

{{1}}