Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin扩展函数是否隐式声明成员变量?_Kotlin_This_Extension Function - Fatal编程技术网

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