在Map上进行映射时避免使用Erasure消除

时间:2013-06-06 20:18:56

标签: scala type-erasure

我想映射一个类型为List[~(A,Option[B])]的地图,但在我映射之前我将它分组为A.现在我可以映射它,我必须匹配地图的元组:< / p>

val rawData: List[A ~ Option[B]]

rawData
    .groupBy(_._1)
    .map(case (first: A, second: Seq[A ~ Option[B]]) => 
        C(first, second.map(_._2))
    )

现在编译器警告我:

non-variable type argument anorm.~[A,Option[B]] in type pattern Seq[anorm.~[A,Option[B]]] is unchecked since it is eliminated by erasure

我发现了几种解决方案可以使匹配成为可能,但我有一种感觉,也可以完全避免匹配,因为我只想通过已定义类型的Map。怎么可能这样呢?

1 个答案:

答案 0 :(得分:2)

在这种情况下,您实际上不必担心这一点。该错误是因为您的case语句过于冗长。更改为以下内容:

rawData.groupBy(_._1).map(case (first, second) => 
  C(first, second.map(_._2))
)

case语句中的类型限制元组的类型(这是不必要的)。但是,它们以在运行时无法验证的方式限制它(由于类型擦除),这就是你得到错误的原因。