"接收器对象"和"扩展接收器"之间有什么区别吗

Igo*_*jda 0 kotlin kotlin-extension

根据文档https://kotlinlang.org/docs/reference/extensions.html很难说出来

所以我想知道接收器对象扩展接收器是一样的吗?或者名称取决于上下文?

mfu*_*n26 5

一个扩展接收器是一个接收器对象接收器对象可以是一个调度接收器扩展接收器.

在类中,您可以为另一个类声明扩展.在这样的扩展中,有多个隐式接收器 - 可以在没有限定符的情况下访问其成员.声明扩展名的类的实例称为调度接收器,扩展方法的接收器类型的实例称为扩展接收器.

class D {
    fun bar() { ... }
}

class C {
    fun baz() { ... }

    fun D.foo() {
        bar()   // calls D.bar
        baz()   // calls C.baz
    }

    fun caller(d: D) {
        d.foo()   // call the extension function
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,该函数foo有两个隐式接收器:C调度接收器,D扩展接收器.如果foo在那之外宣布class C它将只有一个接收器,它将是扩展接收器 D.

简而言之,接收器对象扩展接收器可以是相同的,但是还有另一种类型的接收器对象,称为调度接收器.

有关更多详细信息,请参阅将扩展声明为成员 - 扩展 - Kotlin编程语言.