在 Scala 中附加到 Seq 不会编译

Appending to Seq in Scala does not compile

在这段代码中,我尝试向 Seq[Seq[String]] 结构添加值,但下面显示的行抛出编译错误,这是为什么?

var values2 = Seq[Seq[String]]()
values2 = values2 :+ Seq[String]()
for ( x <- 0 to 5) {
      values2(0) = values2(0) :+ (x + "")  // <-- value update is not a member of Seq[Seq[String]]
    }

发生这种情况是因为内部集合是不可变的,您不能使用 = 重新分配它的值。

但是你可以使用它的update方法(类似于case-classes上的copy方法),所以它会像这样:

for ( x <- 0 to 5) {
  values2 = values2.updated(0, values2(0) :+ (x + ""))
}

现在您只需处理 values2 集合,其中一个元素已更改。

import scala.collection.mutable

var values2 = mutable.Seq[mutable.Seq[String]]()
values2 = values2 :+ mutable.Seq[String]()
for (x <- 0 to 5) {
  values2(0) = values2(0) :+ (x + "")
}

您可以通过显式使用 mutable.Seq 而不是不可变的默认 Seq 来解决此问题。