从另一个问题,我问继,Scala 2.8 breakout,我想了解更多的关于Scala的方法TraversableLike[A].map
其签名如下:斯卡拉2.8 CanBuildFrom
def map[B, That](f: A => B)(implicit bf: CanBuildFrom[Repr, B, That]): That
注意的几件事情有关此方法:
- 它需要一个函数将遍历中的每个
A
转换为B
。 - 它返回
That
并采用CanBuildFrom[Repr, B, That]
类型的隐式参数。
我可以调用这个如下:
> val s: Set[Int] = List("Paris", "London").map(_.length)
s: Set[Int] Set(5,6)
什么我不能很好地领会是怎样的事实That
是势必到B
(即,它是B的部分集合)正在被编译器强制执行。该类型的参数看起来是独立的上方和性状CanBuildFrom
本身的签名的签名:
trait CanBuildFrom[-From, -Elem, +To]
如何Scala编译器确保That
不能被迫到一些东西,没有意义?
> val s: Set[String] = List("Paris", "London").map(_.length) //will not compile
编译器如何决定什么隐含CanBuildFrom
对象范围的电话吗?
这里是后一个相当不错的解释http://blog.bruchez.name/2012/08/getting-to-know-canbuildfrom-without-phd.html – 2012-08-23 21:33:26
为了记录在案,这种用法有概念名称:返回类型多态。 – lcn 2015-03-07 20:18:45