在 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 来解决此问题。
在这段代码中,我尝试向 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 来解决此问题。