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))