我可以使用“小”函数定义“大”函数:
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。这在技术上有所帮助,但没有解释这两个功能之间的区别。