gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:53:51 26 4
gpt4 key购买 nike

在Kotlin中,使用作用域函数,比如“with”,允许 block 内的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 // ???
}

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

class MyClass {
var personName = ""
...
with(personRepository.getPerson(personId)) {
personName = this.name
}

最佳答案

this 指的是您传递的对象。为了让您引用类(class)的上下文,您需要使用如下标签。请注意,这是一种反模式。使用作用域函数,您只想在传递的对象上应用逻辑,或者在 letapply

等作用域函数中作为接收者对象
class MyClass {
var name: String = ""
val person = Person("my name")

fun setName() = with(person) {
this@MyClass.name = person.name
}
}

关于android - 在 Kotlin 中,当变量与 lambda 接收器中的字段同名时,如何从作用域函数外部引用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70988112/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com