2013-09-26 3 views
1

Как сказано в названии, я не могу передать переменную типа Arraybuffer(Arraybuffer(Int,Int),Int) в течение loop:Присвоение вар ArrayBuffer в цикле: «переназначение вал»

var ab1 = ArrayBuffer(le4: _*) 
var ab2 = ab1 map (ligne => (ArrayBuffer(ligne._1: _*), ligne._2)) 
println("ab:" + ab2) 

for { 
    i <- 1 to ab2.length 
    j <- 0 to i 
} { 
    ab2(i)._1(j)._2 = j match { 
     case 0 => ab2(i - 1)._1(0)._2 + ab2(i)._1(j)._1 
     case i => ab2(i - 1)._1(j - 1)._2 + ab2(i)._1(j)._1 
     case _ => ab2(i - 1)._1(j)._2 + ab2(i - 1)._1(j - 1)._1 + ab2(i)._1(j)._1 
    } 
} 

ключевым моментом является что ab2 объявлен как var, но изменение Int внутри него отрицается. Зачем?

+0

Возможный дубликат [В чем разница между определением var и val в Scala?] (Http://stackoverflow.com/questions/1791408/what-is-the-difference-between-a-var-and- val-definition-in-scala) – senia

ответ

6

Существует разница между var и объектом mutable.

  • var может иметь свое значение переназначены по желанию
  • mutable объект может иметь свои поля переназначены. Как объект с var с в его

Вы пытаетесь установить _2 поле кортежа внутри ab2; Кортежи неизменяемы, поэтому причина ошибки компилятора.

Пересмотреть структуру данных, которые вы используете для этой операции. A collection.mutable.Map может быть лучше или что-нибудь еще, у которого есть метод update, который позволяет изменять значения внутри него.

+0

спасибо, это понятно – lolveley

Смежные вопросы