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



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

是的,API文档中给出的签名是故意错误的,以隐藏隐含的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)

最新更新