相关疑难解决方法(0)

Scala 2.8 CanBuildFrom

继我提出的另一个问题,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调用范围内的隐式对象是什么?

generics scala scala-2.8

27
推荐指数
1
解决办法
6163
查看次数

标签 统计

generics ×1

scala ×1

scala-2.8 ×1