首页 > 解决方案 > Scala Seq[Seq[SomeClass]] 可变集合的类型不匹配

问题描述

我遇到了与多个 Seq 嵌套和可变集合相关的问题。如果我使用 Seq[Seq[SomeClass]] 并为 Seq 使用可变集合,它将在 IntelliJ 中产生类型不匹配为Type mismatch, expected: String, actual: SomeClass. 如果我运行它,它会抛出

value += 不是 Seq[SomeClass] 的成员。表达式不会转换为赋值,因为接收者不可赋值。

代码如下。错误在 处k1Class.students += mary,代码中对此进行了注释。

package core

import scala.collection.mutable
import scala.collection.mutable.{ArrayBuffer, ListBuffer}

case class Student(age: Int, name: String)
case class Class(topic: String, students: Seq[Student])

object Test2 {

  def main(args: Array[String]): Unit = {
    val grades = mutable.HashMap[String, Seq[Class]]()
    val classes = ListBuffer[Class]()
    val students = ArrayBuffer[Student]()

    val bob = Student(7, "Black")

    students += bob

    val musicClass = Class("music", students)

    classes += musicClass

    grades += ("k1" -> classes)

    val k1Classes = grades.get("k1").get

    for (k1Class <- k1Classes){
      val mary = Student(7, "Brown")
      //!!! Error here!!! Type mismatch, expected: String, actual: Student
      k1Class.students += mary  
    }
  }
 }

我很迷茫为什么会这样。非常感谢!

标签: scalacollections

解决方案


我通过两个小改动让它编译。

import scala.collection.mutable.{ArrayBuffer, ListBuffer, Seq}
                                                          ^^^

  k1Class.students.update(0, mary)

通常不鼓励如此严重依赖可变性,但我们都必须从某个地方开始。


推荐阅读