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

Lambda表达式捕获修改外部变量:能否递增主函数counter值?

Kotlin Lambda中能否递增主函数内的counter变量?

你的示例代码不能实现counter的递增,问题出在lambda的调用方式上。

先看你提供的代码:

fun main(){
   var counter = 0
   val incr = { ++counter}
   incr
   println(counter) // 输出0
}

这里的incr只是lambda对象的引用,你仅写出变量名但未执行它,++counter的逻辑根本没触发,counter的值自然保持初始的0。

为什么Lambda能修改外部变量?

Kotlin的lambda支持捕获外部作用域的可变变量(var修饰的),它会把这类变量包装成带引用的容器(规避Java中“有效final”的限制),只要正确调用lambda,就能修改外部变量的值。

正确实现的代码

只需把incr改成incr(),执行这个lambda:

fun main(){
   var counter = 0
   val incr = { ++counter}
   incr() // 调用lambda执行递增逻辑
   println(counter) // 输出1
}

运行后counter的值会成功递增到1。

额外补充:如果是val修饰的变量,lambda只能读取它的值,无法直接修改;但如果变量是可变对象(比如MutableList),可以修改对象内部的状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 06:13:15