继我提出的另一个问题,Scala 2.8突破之后,我想了解更多关于Scala方法的信息,TraversableLike[A].map其签名如下:
def map[B, That](f: A => B)(implicit bf: CanBuildFrom[Repr, B, That]): That
Run Code Online (Sandbox Code Playgroud)
请注意有关此方法的一些事项:
A,将遍历中的每个转换为a B.That并采用类型的隐式参数CanBuildFrom[Repr, B, That].我可以这样称呼如下:
> val s: Set[Int] = List("Paris", "London").map(_.length)
s: Set[Int] Set(5,6)
Run Code Online (Sandbox Code Playgroud)
什么我不能很好地领会是怎么说的事实That是必然要B(即,它是B的一些集合)是由编译器执行.类型参数看起来独立于上面的签名和特征CanBuildFrom本身的签名:
trait CanBuildFrom[-From, -Elem, +To]
Run Code Online (Sandbox Code Playgroud)
Scala编译器如何确保That不会强制进入没有意义的东西?
> val s: Set[String] = List("Paris", "London").map(_.length) //will not compile
Run Code Online (Sandbox Code Playgroud)
编译器如何确定CanBuildFrom调用范围内的隐式对象是什么?