0

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

所以我想知道接收器对象扩展接收器是否相同?还是名称取决于上下文?

4

1 回答 1

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

在上面的示例中,该函数foo有两个隐式接收器C:调度接收器D和扩展接收器。如果foo在外部声明,class C那么它将只有一个接收器,即扩展接收器 D

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

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

于 2016-08-16T12:59:54.547 回答