Scala声明变量i提示未使用但实际在for循环中使用如何解决
问题原因
你代码中声明的两个同名i是完全独立的不同变量:
- else分支开头声明的
var i = 0是该分支作用域下的顶层局部变量 - for循环
for (i <- 0 until (top))中<-左侧的i是for循环专属作用域内隐式声明的val类型变量,会直接遮蔽外层的同名i。外层声明的i自始至终没有被读写过,所以编译器会抛出未使用的告警,告警本身是完全准确的。
解决方案
根据你的实际使用场景二选一即可:
- 如果你只是需要在循环内获取0到4的遍历值,不需要在循环外使用
i,直接删掉开头的var i = 0即可,for循环内部的i完全可以满足需求:
else { // 这里的i是for循环自动生成的遍历值,取值为0、1、2、3、4 for (i <- 0 until top) { // 循环逻辑 } }
- 如果你确实需要在循环外维护可修改的
i变量、后续还要在循环结束后使用它的最终值,修改for循环的生成器变量名,或者用占位符避免遮蔽外层变量即可:
else { var i = 0 // 用下划线占位,不生成额外的循环变量,避免遮蔽外层的i for (_ <- 0 until top) { // 这里可以正常读写外层的i i += 1 } // 循环结束后可继续使用i的最终值 }
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

