2013-09-26 97 views
1

如標題所述,我不能重新分配Arraybuffer(Arraybuffer(Int,Int),Int)類型的變量中一個爲loop分配在一個變種arraybuffer for循環的:「重新分配給VAL」

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

[Scala中var和val定義之間有什麼區別?](http://stackoverflow.com/questions/1791408/what-is-the-difference-between-a-var-and- val-definition-in-scala) – senia

回答

6

varmutable對象之間有區別。

  • var可以具有其值隨意
  • 一個mutable對象可以有它的場重新分配重新分配。就像在var秒的對象是

您正在嘗試設置ab2裏面的元組的_2領域;元組是不可變的,這就是它導致編譯器錯誤的原因。

重新考慮您在此操作中使用的數據結構。一個collection.mutable.Map可能會更好,或者其他任何有update方法,允許您更改其中的值。

+0

謝謝,很清楚 – lolveley

相關問題