1

如标题中所述,我无法Arraybuffer(Arraybuffer(Int,Int),Int)在 for 中重新分配类型变量loop

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 更改被拒绝。为什么?

4

1 回答 1

6

vara和mutableobject是有区别的。

  • var可以随意重新分配其价值
  • mutable对象可以重新分配其字段。就像一个var里面有 s的对象

您正在尝试在;中设置_2元组的字段 ab2元组是不可变的,这就是它导致编译器错误的原因。

重新考虑您用于此操作的数据结构。Acollection.mutable.Map可能更好,或者其他任何具有update允许您更改其内部值的方法的方法。

于 2013-09-26T12:15:39.600 回答