关于函数类型(Foo,Int,Int)->Unit

来源:3-5 函数

我敲阔爱

2022-05-19

比如这样
fun test(foo:Foo,a:Int,b:Int){}和
class Foo{
fun met(a:Int, b:Int){}
}
是不是都可以用(Foo,Int,Int)->Unit来表示,这样以来不就区别不开有receiver和没有recevier了吗,Kotlin为什么要这么设计

写回答

2回答

qq_忘记

2023-01-15

区别不开就区别不开呗,我只关心最终调用的是哪个函数,并不关心声明的类型,函数变量又不是仅仅有声明就能用,必须要初始化,初始化的时候就知道它引用的是哪个函数,赋值::bar给它它就没有receiver,赋值Foo::bar给它它就有receiver。

0
0

bennyhuo

2022-05-19

因为receiver本来就是第一个参数,这基本上已经是编程语言设计上非常常见的做法了。如果一定要严格限制的话,很多函数都需要定义两个版本分别应对当做第一个参数或者receiver的情况。
0
0

学会Kotlin 突破开发语言瓶颈

如果有一门语言可以取代Java,那么它一定是Kotlin。

1760 学习 · 481 问题

查看课程