【发布时间】:2017-01-05 08:56:53
【问题描述】:
我刚刚看了List.flatMap 声明,对此感到有些惊讶。
final override def flatMap[B, That](f: A => GenTraversableOnce[B])
(implicit bf: CanBuildFrom[List[A], B, That]): That
object List 定义的地方:
implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, List[A]] =
ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]]
所以,如果我们在List 上调用flatMap,我们将得到List,如果它总是被推导出为List[B],我看不到That 类型的任何意义(因为implicit)。
【问题讨论】:
-
implicit可以被更本地化的覆盖,例如,Vector,或者作为参数显式传递 -
查看stackoverflow.com/a/1728140/5344058 以了解何时将
That设置为与原始集合不同的类型很有用 -
你有没有见过
collection.breakout带有 flatMap 或 Map...这是覆盖这个隐式的一个例子。
标签: scala collections implicit