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

运行Scala代码出现error: reassignment to val错误,求原因及修改方案

Scala中"reassignment to val"错误原因及解决方法

错误原因

函数Fun的参数a: Int在Scala里默认是val(不可变变量)——哪怕外部的a是var类型,传递到函数内部后,参数a会成为一个全新的val变量,完全不允许重新赋值。所以循环里的a = a + 1才会触发"reassignment to val"错误。

修改方案

方案1:把函数参数声明为var

直接将函数的参数改为可变的var类型,就能在循环里修改它的值:

def main(args: Array[String]) :Unit = {
    var a = 10
    def Fun(var a:Int):Unit = {
      while( a < 20 ){
       println( "Value of a: " + a );
       a = a + 1
      }
    }
    Fun(a)
 }

方案2:在函数内部定义可变变量接收参数

保持参数为val,在函数内部新建一个var变量来接收参数值,后续修改这个内部的var:

def main(args: Array[String]) :Unit = {
    var a = 10
    def Fun(aParam:Int):Unit = {
      var a = aParam
      while( a < 20 ){
       println( "Value of a: " + a );
       a = a + 1
      }
    }
    Fun(a)
 }

方案3:用递归替代while(函数式风格)

Scala更推荐函数式编程,用递归代替while循环,避免可变变量的使用:

def main(args: Array[String]) :Unit = {
    var a = 10
    def Fun(a:Int):Unit = {
      if(a < 20){
        println( "Value of a: " + a );
        Fun(a + 1)
      }
    }
    Fun(a)
 }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 02:37:14