You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中如何在with作用域内访问外部作用域变量?

Kotlin with块中访问外部局部变量的可行方案

你的问题出在:with(data)代码块的上下文是MyData实例,直接写name会优先指向MyData的name属性;而外部的name是函数内的局部变量,并非类成员,所以this@name这种写法无效(this在这里指代KotlinTest的实例,该实例并没有name属性)。

以下是两种可行的解决方式:

方式一:利用函数名作为作用域标签

函数本身就是一个作用域,可以直接用函数名作为标签来限定访问外部局部变量:

class KotlinTest {

    @Test
    fun `scoping head scratcher`() {
        
        data class MyData(val name:String)
        
        val name = "Happy Wok"
        val data = MyData(name)
        
        with(data) { 
            assert(name == this@`scoping head scratcher`.name) 
        }
    }
}

方式二:自定义作用域标签

给外部变量所在的代码块添加自定义标签,通过标签来指定作用域:

class KotlinTest {

    @Test
    fun `scoping head scratcher`() {
        
        data class MyData(val name:String)
        
        outerScope@ {
            val name = "Happy Wok"
            val data = MyData(name)
            
            with(data) { 
                assert(name == this@outerScope.name) 
            }
        }()
    }
}

核心逻辑是:局部变量的作用域需要通过作用域标签来明确指定,而不是依赖this(this仅适用于类、对象或扩展函数的上下文)。

内容的提问来源于stack exchange,提问作者Kurt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 12:48:22