Kotlin 扩展函数是否隐式声明成员变量?

Do Kotlin Extension Functions declare member variables implicitly?

我有一个数据classUser

data class User(name: String?, email: String?)

我创建了一个扩展函数来获取最佳标识符(首先是姓名,然后是电子邮件)

fun User.getBestIdentifier(): String {
    return when {
        !this.name.isNullOrBlank() -> this.name
        !this.email.isNullOrBlank() -> this.email
        else -> ""
}

但我注意到,在我的 IDE 中,如果我去掉所有 this 单词,它仍然可以编译并运行。喜欢:

fun User.getBestIdentifier(): String {
    return when {
        !name.isNullOrBlank() -> name
        !email.isNullOrBlank() -> email
        else -> ""
}

我的结论是 Kotlin 扩展函数隐式支持成员变量,但我不确定。有没有人有任何关于这种现象的文件或对 why/how 它发生的解释?

docs状态:

The this keyword inside an extension function corresponds to the receiver object.

在您的例子中,User 是接收者对象,因此 this 恰好指代该对象。

可以在 this site 上找到另一个参考,它描述了 this 表达式:

In an extension function or a function literal with receiver this denotes the receiver parameter that is passed on the left-hand side of a dot.

进一步:

When you call a member function on this, you can skip the this.