代码之家  ›  专栏  ›  技术社区  ›  ps0604

在Scala中附加到Seq不会编译

  •  2
  • ps0604  · 技术社区  · 6 年前

    在这段代码中,我试图向 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]]
        }
    
    2 回复  |  直到 6 年前
        1
  •  3
  •   Yevhenii Popadiuk    6 年前

    发生这种情况的原因是内部集合是不可变的,并且不能使用 = .

    但你可以使用 update it方法(类似于 copy 方法),因此如下所示:

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

    现在你只是应付 values2 更改了一个元素的集合。

        2
  •  1
  •   Peter Fitch    6 年前
    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是不可变的。