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

Kotlin中如何在循环内初始化val?代码运行原理咨询

Kotlin循环中每次迭代初始化val的原理及代码运行原因

代码能正常运行的核心原因

你这段代码能跑起来,关键在于作用域的隔离:

  • repeat(n)是Kotlin标准库提供的函数,它会把传入的Lambda代码块完整执行n次。
  • 每次执行Lambda时,都会进入一个全新的局部作用域。你在Lambda里定义的val next,其作用域只限于当前这次迭代的代码块内部。
  • Kotlin对val的限制是“同一个作用域内不能重复声明或修改”,但不同作用域下完全可以定义同名的val——因为它们是彼此独立的新变量,不是对同一个变量的重复赋值。

另外代码里的sum应该是在外部定义的可变变量(比如var sum = 0),它的作用域覆盖了整个repeat代码块,所以每次迭代都能对它进行累加操作。

如何在循环每次迭代中初始化val

你这段代码已经是正确的实现方式了,核心思路就是把val的定义放在循环每次执行的代码块内部:

  • 不管是用repeat的Lambda,还是for循环的代码块,每次迭代都会创建一个新的作用域,在这个作用域内定义val,就相当于每次迭代都初始化了一个全新的只读变量。
  • 举个for循环的等价例子:
val n = readln().toInt()
var sum = 0
for (_ in 1..n) {
    val next = readln().toInt()
    sum += next
}

这里每次循环的{}都是独立作用域,val next每次都是全新的变量,完全符合Kotlin的语法规则。

总结一下:val的“只读”是针对同一作用域的,利用循环迭代时的作用域隔离,就能轻松实现每次迭代初始化新的val变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:16:21