无法在 foldLeft 中累积 Seq[Seq[SomeType]]
Unable to accumulate a Seq[Seq[SomeType]] in foldLeft
我需要迭代基本特征项列表,并根据特定条件对特定类型的所有实例进行分组。
但是我在 foldLeft 内的 match 子句的一个分支上遇到语法错误。
trait Base {
def foo: Int
}
case class TypeA(foo: Int) extends Base
case class TypeB(foo: Int) extends Base
object Main {
def main(args: Array[String]): Unit = {
val items: Seq[Base] = Seq(TypeA(1), TypeB(2), TypeB(3), TypeA(2), TypeA(3))
val typeAs: Seq[Seq[TypeA]] = items.foldLeft(Seq.empty[Seq[TypeA]]) { case (acc, item) =>
val someCondition = true
item match {
case el:TypeA =>
if (acc.nonEmpty) {
if (someCondition)
acc :+ Seq(Seq(el)) // type mismatch error here
else
acc.init :+ (acc.last :+ el)
} else
Seq(Seq(el))
case _:TypeB =>
acc
}
}
}
}
编译错误为
error: type mismatch;
found : Seq[Seq[Equals]]
required: Seq[Seq[TypeA]]
acc :+ Seq(Seq(el))
通过 Maven 编译器插件使用 Scala 2.13.3。
啊哈,粗心犯了个错误
应该尝试将 Seq[TypeA] 附加到累加器
acc :+ Seq(el)
我需要迭代基本特征项列表,并根据特定条件对特定类型的所有实例进行分组。 但是我在 foldLeft 内的 match 子句的一个分支上遇到语法错误。
trait Base {
def foo: Int
}
case class TypeA(foo: Int) extends Base
case class TypeB(foo: Int) extends Base
object Main {
def main(args: Array[String]): Unit = {
val items: Seq[Base] = Seq(TypeA(1), TypeB(2), TypeB(3), TypeA(2), TypeA(3))
val typeAs: Seq[Seq[TypeA]] = items.foldLeft(Seq.empty[Seq[TypeA]]) { case (acc, item) =>
val someCondition = true
item match {
case el:TypeA =>
if (acc.nonEmpty) {
if (someCondition)
acc :+ Seq(Seq(el)) // type mismatch error here
else
acc.init :+ (acc.last :+ el)
} else
Seq(Seq(el))
case _:TypeB =>
acc
}
}
}
}
编译错误为
error: type mismatch;
found : Seq[Seq[Equals]]
required: Seq[Seq[TypeA]]
acc :+ Seq(Seq(el))
通过 Maven 编译器插件使用 Scala 2.13.3。
啊哈,粗心犯了个错误 应该尝试将 Seq[TypeA] 附加到累加器
acc :+ Seq(el)