根据API,函数签名为def flatMap[B](f: (A) ⇒ GenTraversableOnce[B]): List[B]
,其中B是返回集合的元素类型
然后为什么没有
val xs = Map("a" -> List(11,111), "b" -> List(22,222)).flatMap[Int](_._2)
编译?它为方法'提供了错误数量的类型参数。错误,似乎表明签名与API文档中的不同?
答案 0 :(得分:6)
是的,API文档中提供的签名为intentionally wrong,以隐藏隐式CanBuildFrom
参数,因为它会扰乱人们。点击"完整签名"在方法文档的底部看到实际的签名:
def flatMap[B, That](f: ((A, B)) ⇒ GenTraversableOnce[B])
(implicit bf: CanBuildFrom[Map[A, B], B, That]): That
在这种情况下,您可以不使用类型参数。
scala> val xs = Map("a" -> List(11,111), "b" -> List(22,222)).flatMap(_._2)
xs: scala.collection.immutable.Iterable[Int] = List(11, 111, 22, 222)