在我正在进行的一个项目中,我经常发现自己将 List[(A, List[B])] 转换为 List[(A, B)] ,其中 A 中的每个 a 都与 B 中相应的 b 配对一对。
我编写了以下 Scala 方法来实现这一点。
object Loop {
def unroll[A, S <: Seq[B], B](in: Seq[(A, S)]) : Seq[(A, B)] =
in.flatMap(inPair => inPair._2.map(c => inPair._1 -> c))
}
当我尝试直观地使用它时
Loop.unroll(List[Pair[Int, List[String]]](1->List("1", "2")))
我得到一个编译器参数说明
推断的类型参数 [Int, List[String], Nothing] 不符合方法展开的类型参数边界 [A, S<: Seq[B],B]。
我可以通过参数化展开来解决这个问题
unroll[Int, List[String], String](...)
但是从美学上讲,我觉得第三个字符串参数是多余的。如果可能的话,我怎样才能将其重写为不需要第三个类型参数或允许 scala 的类型推断来猜测它?我正在使用 scala 2.9.3。