Kotlin扩展函数是否隐式声明成员变量?
我有一个数据类Kotlin扩展函数是否隐式声明成员变量?,kotlin,this,extension-function,Kotlin,This,Extension Function,我有一个数据类User data class User(name: String?, email: String?) 我创建了一个扩展函数来获取最佳标识符(首先是姓名,然后是电子邮件) 但我注意到,在我的IDE中,如果我去掉所有的this单词,它仍然可以编译和运行。比如: fun User.getBestIdentifier(): String { return when { !name.isNullOrBlank() -> name !email
User
data class User(name: String?, email: String?)
我创建了一个扩展函数来获取最佳标识符(首先是姓名,然后是电子邮件)
但我注意到,在我的IDE中,如果我去掉所有的this
单词,它仍然可以编译和运行。比如:
fun User.getBestIdentifier(): String {
return when {
!name.isNullOrBlank() -> name
!email.isNullOrBlank() -> email
else -> ""
}
我的结论是Kotlin扩展函数隐式支持成员变量,但我不确定。有人有关于这种现象的任何文件或解释其发生的原因/方式吗?该州:
扩展函数中的this
关键字对应于接收方对象
在您的例子中,User
是接收者对象,因此此
正好引用该对象
另一个参考描述了此
表达式:
在扩展函数或带有receiver的函数文本中,此
表示在点的左侧传递的接收器参数
进一步:
在
this
上调用成员函数时,可以跳过this
您可以在没有歧义的任何地方省略
此
,而不仅仅是在扩展函数中<代码>此仅当您需要区分具有匹配名称的成员时才是必需的,例如在函数中,参数名称与包含函数的类中的名称匹配。“在此上调用成员函数时,您可以跳过this。”或扩展函数,或访问属性或内部类。。。
fun User.getBestIdentifier(): String {
return when {
!name.isNullOrBlank() -> name
!email.isNullOrBlank() -> email
else -> ""
}