在 Kotlin 中,当变量与 lambda 接收器中的字段同名时,如何从作用域函数外部引用变量

MrC*_*mly 4 android kotlin

在 Kotlin 中,使用“with”等作用域函数允许 this块内的引用引用 lambda 结果,当外部类成员与结果中的字段之一同名时,是否可以引用外部类成员?

例如

data class Person(name: String)
...
class MyClass {
    var name = ""

    with(personRepository.getPerson(personId)) {
        // How do we set the class "name" member - "this.name" or just "name" refers to the scoped object?
        name = this.name // ???
    }
Run Code Online (Sandbox Code Playgroud)

显然,使用不同的变量名称是简单的解决方法,但只是想知道当变量具有相同名称时是否有语法

class MyClass {
    var personName = ""
...
    with(personRepository.getPerson(personId)) {
        personName = this.name
    }
Run Code Online (Sandbox Code Playgroud)

Dan*_*cob 7

thethis指的是您传递的对象。为了让您引用班级的上下文,您需要使用如下标签。请注意,这是一种反模式。使用作用域函数,您只想对正在传递的对象或作用域函数中的接收者对象应用逻辑,例如letapply

class MyClass {
    var name: String = ""
    val person = Person("my name")

    fun setName() = with(person) {
       this@MyClass.name = person.name 
    }
}
Run Code Online (Sandbox Code Playgroud)