无法在foldLeft中累积Seq [Seq [SomeType]]

时间:2017-11-23 17:27:46

标签: scala type-erasure

我需要迭代基本特征项列表,并根据特定条件组对特定类型的所有实例进行迭代。 但是我在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
      }
    }
  }
}

编译错误是

  

错误:类型不匹配;

     

发现:Seq [Seq [Equals]]

     

必需:Seq [Seq [TypeA]]

     

acc:+ Seq(Seq(el))

通过maven编译器插件使用Scala 2.13.3。

1 个答案:

答案 0 :(得分:0)

啊,犯了一个粗心的错误 应该尝试将Seq [TypeA]附加到累加器

  

acc:+ Seq(el)