运行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
相关产品推荐
相关产品推荐

