Scala 在for循环中分配var arraybuffer:";重新分配给val";

Scala 在for循环中分配var arraybuffer:";重新分配给val";,scala,for-loop,Scala,For Loop,正如标题中所说,我不能在for循环中重新分配类型为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 } {

正如标题中所说,我不能在for
循环中重新分配类型为
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
    }
}
var ab1=ArrayBuffer(le4:*)
var ab2=ab1映射(ligne=>(ArrayBuffer(ligne.\u 1:\u*),ligne.\u 2))
println(“ab:+ab2)
为了{
i ab2(i-1)。1(j-1)。2+ab2(i)。1(j)。1
案例u=>ab2(i-1)。1(j)。2+ab2(i-1)。1(j-1)。1+ab2(i)。1(j)。1
}
}

关键的一点是
ab2
被声明为var,但其内部Int的更改被拒绝。为什么?

var
mutable
对象之间有区别

  • var
    可以随意重新分配其值
  • mutable
    对象可以重新分配其字段。像一个有
    var
    s的对象
您正试图在
ab2
中设置元组的
_2
字段;元组是不可变的,这就是它导致编译器错误的原因


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

var
mutable
对象之间存在差异

  • var
    可以随意重新分配其值
  • mutable
    对象可以重新分配其字段。像一个有
    var
    s的对象
您正试图在
ab2
中设置元组的
_2
字段;元组是不可变的,这就是它导致编译器错误的原因

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

可能重复的