"Ошибка: переназначение на val" будет выброшено в функцию

когда я запускаю следующие коды, выдается «ошибка: переназначение на val», кто-нибудь знает, почему?

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

Если я хочу реализовать функцию переменной плюс один в функции Fun, как ее изменить?

1 ответ

Вы скрываете внешнюю переменную с параметром методаaкоторый являетсяval"автоматически".

Вы написали то же самое, что и:

          var a = 10
    def Fun(b:Int):Unit = {
      while( b < 20 ){
       println( "Value of b: " + b );
       b = b + 1 // Error: reassignment to val 
      }
    }
    Fun(a)

Я предполагаю, что вы хотите удалить параметр метода, так как хотите увеличить внешнюю переменную, которая доступна при определении внутреннего метода:

          var a = 10
    def Fun():Unit = {
      while( a < 20 ){
       println( "Value of a: " + a );
       a = a + 1
      }
    }
    Fun()

Имейте в виду, что это не идиоматический код Scala, и неясно, чего вы пытаетесь достичь, поэтому я не могу предложить вам лучшее решение, если вы определенно не хотите писать такой код в реальных проектах.

Другие вопросы по тегам