scala - 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
}
}
}
我很迷茫为什么会这样。非常感谢!
解决方案
我通过两个小改动让它编译。
import scala.collection.mutable.{ArrayBuffer, ListBuffer, Seq}
^^^
和
k1Class.students.update(0, mary)
通常不鼓励如此严重依赖可变性,但我们都必须从某个地方开始。
推荐阅读
- vue.js - 天蓝色地图不会在正确的位置渲染标记
- java - 我的 Java 代码中发生了什么使答案是否定的?
- python - GUI 中的“交互式”图形
- angular - 您可以在填写表格时以编程方式提交有角度的表格吗?
- python-3.x - Pandas 将列表的列拆分为多个新列
- android - 发生片段加载闪烁时带有导航组件的底部导航
- python - 如何在 python 中使用 altair 包加载和绘制 csv 文件?
- javascript - 如何在js树中删除选定的下划线和换行符?
- python - 使用 tkinter 框架使用 pyopengl 渲染立方体
- c++ - 为什么我们在 C++ 中使用返回数据结构的函数?