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
.
我有一个数据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 thethis
.