这个receiver搞的我很懵逼
来源:3-5 函数

远方的鸾
2021-01-04
网上很多包括郭霖大神关于函数都说可以认为是方法,老师这个receiver加的我看了三遍还是没看懂这个函数
写回答
2回答
-
首先,receiver不是我加的,他本身就是存在的,是众多有函数类型的语言都存在的概念,例如 javascript,甚至 C语言。Kotlin自然也不例外,官方文档当中也随处可见 receiver 这样的叫法,在Kotllin的反射库当中反射获取到函数还有个 receiver 的属性来获取函数绑定的 receiver 。 其次,Java当中的方法method实际上都是有 receiver 的函数,所以说方法就是函数本身没毛病。反过来,函数可以没有receiver,在Kotlin当中表现为顶级函数(也就是定义在类外面的函数)。 再者,回避receiver这个概念只能让你暂时混过去了,你但凡想深入一下函数,哪怕是看一下 forEach 的源码,你都会遇到 receiver 的问题。所以,不管哪个大神说什么,逃避不是解决问题的办法。 那什么是 receiver 呢? 就是一个函数的调用者,例如 x.toString(),x 就是 toString 函数的 receiver。为什么会叫 receiver而不是 invoker或者其他叫法呢?因为最早的类似于C语言这样的语言并没有面向对象的语法支持,所有的函数都是独立的不从属于所谓的类型,调用的时候如果想要作用于某一个特定的"对象",就需要把他传进去,函数被认为是一个消息,这个"对象"就是消息的接收者。 其实挺简单,理解不了没关系,你只是一时半会儿接受不了这个概念而已,过两天再来看就好了。20
-
远方的鸾
提问者
2021-01-04
我问出来就后悔了,然后发现不能撤回,其实心里也大概明白难的也不是receiver,只是自己理解不了对自己生气,一时冲动就发出来了。关于receiver后边我单独看了那两分钟好几遍感觉确实没什么,因为只接触过java语言,对后边的函数引用,函数类型,默认参数,具名参数,多返回值都是没接触过的概念,函数类型和函数引用这两个概念对于我来说一时确实难以消化,我没想明白到底在哪能用的到,为什么要这么做,明天我在看两遍加深下理解,感谢老师对我这么无知的问题做出解答
012021-01-04
相似问题