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

Intellij idea 为什么我可以使用lambda表达式的名称,但不能使用函数的名称?,intellij-idea,lambda,functional-programming,kotlin,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}

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

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是一样的东西

有一个答案建议在我的例子中使用::plus2。这在技术上有帮助,但不能解释这两种功能之间的区别。

您需要使用:


此错误消息具有误导性,显然已被中断@voddan请看这里:。“我认为,这是更糟糕的问题。”甘努斯说。有什么问题吗?我能帮忙吗?@voddan我知道,丹尼尔,你是Kotlin社区的活跃分子?如果违反了替代法,至少应该有一些解释。对不起,你自己让我改变了问题,使你的答案不再是答案。但这对我来说是一个答案,而且确实有帮助。祝你圣诞快乐,新年快乐。请不要生气,我显然比你更有理论性。:-)@甘努斯-没问题:)
println(apply3(1,2,3,::plus2))