带有类型参数的Scala flatMap函数语法

时间:2014-07-07 21:44:59

标签: scala

根据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文档中的不同?

1 个答案:

答案 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)