2013-09-26 2 views
1

으로 제목에서 말했다, 나는 loop에 대한 입력 Arraybuffer(Arraybuffer(Int,Int),Int)의 변수를 재 할당 할 수 없습니다할당 : "재 할당 발에"

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 정의의 차이점은 무엇입니까?] (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