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